Java'da ekran çözünürlüğünü nasıl alabilirim?


136

Ekran çözünürlüğü (genişlik x yükseklik) piksel olarak nasıl elde edilebilir?

Bir JFrame ve java swing yöntemleri kullanıyorum.


2
ne soru hakkında biraz daha detay sağlayabilir. bir astar yüz farklı yollara yol açabilir.
Anil Vishnoi

7
Sanırım birden fazla monitör ayarını önemsemiyorsunuz. Görünüşe göre birçok uygulama geliştiricisi bunları görmezden geliyor. Herkes çalıştığım yerde birden fazla monitör kullanıyor, bu yüzden onları daima düşünmeliyiz. Tüm monitörleri inceliyor ve yeni nesneler açtığımızda hedefleyebilmemiz için ekran nesneleri olarak kuruyoruz. Bu işlevselliğe gerçekten ihtiyacınız yoksa, sanırım böyle açık uçlu bir soru sormanız ve bir cevabı çok hızlı bir şekilde kabul etmeniz doğru olur.
Erick Robertson

Yanıtlar:


267

Ekran boyutunu Toolkit.getScreenSize()yöntemle alabilirsiniz.

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
double width = screenSize.getWidth();
double height = screenSize.getHeight();

Çoklu monitör yapılandırmasında şunları kullanmalısınız:

GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
int width = gd.getDisplayMode().getWidth();
int height = gd.getDisplayMode().getHeight();

Ekran çözünürlüğünü DPI olarak almak istiyorsanız, getScreenResolution()yöntemi kullanmanız gerekir Toolkit.


Kaynaklar:


4
Bu benim için işe yaramıyor. 3840x2160 monitörüm var, ancak getScreenSize1920x1080 döndürüyor.
ZhekaKozlov

15

Bu kod sistemdeki grafik aygıtlarını numaralandırır (birden çok monitör yüklüyse) ve bu bilgileri monitör benzeşimini veya otomatik yerleşimi belirlemek için kullanabilirsiniz (bazı sistemler bir uygulama çalışırken gerçek zamanlı ekranlar için küçük bir yan monitör kullanır arka plan ve böyle bir monitör boyut, ekran renkleri vb. ile tanımlanabilir):

// Test if each monitor will support my app's window
// Iterate through each monitor and see what size each is
GraphicsEnvironment ge      = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice[]    gs      = ge.getScreenDevices();
Dimension           mySize  = new Dimension(myWidth, myHeight);
Dimension           maxSize = new Dimension(minRequiredWidth, minRequiredHeight);
for (int i = 0; i < gs.length; i++)
{
    DisplayMode dm = gs[i].getDisplayMode();
    if (dm.getWidth() > maxSize.getWidth() && dm.getHeight() > maxSize.getHeight())
    {   // Update the max size found on this monitor
        maxSize.setSize(dm.getWidth(), dm.getHeight());
    }

    // Do test if it will work here
}


3

Bu, söz konusu bileşenin şu anda atanmış olduğu ekranın çözünürlüğüdür (kök pencerenin çoğu kısmı gibi bir şey o ekranda görülebilir).

public Rectangle getCurrentScreenBounds(Component component) {
    return component.getGraphicsConfiguration().getBounds();
}

Kullanımı:

Rectangle currentScreen = getCurrentScreenBounds(frameOrWhateverComponent);
int currentScreenWidth = currentScreen.width // current screen width
int currentScreenHeight = currentScreen.height // current screen height
// absolute coordinate of current screen > 0 if left of this screen are further screens
int xOfCurrentScreen = currentScreen.x

Araç çubuklarına vb. Saygı göstermek istiyorsanız, bununla da hesaplamanız gerekir:

GraphicsConfiguration gc = component.getGraphicsConfiguration();
Insets screenInsets = Toolkit.getDefaultToolkit().getScreenInsets(gc);

3

İşte en sağdaki ekranın en sağ kenarının x konumunu döndüren bazı işlevsel kod (Java 8). Hiçbir ekran bulunmazsa, 0 değerini döndürür.

  GraphicsDevice devices[];

  devices = GraphicsEnvironment.
     getLocalGraphicsEnvironment().
     getScreenDevices();

  return Stream.
     of(devices).
     map(GraphicsDevice::getDefaultConfiguration).
     map(GraphicsConfiguration::getBounds).
     mapToInt(bounds -> bounds.x + bounds.width).
     max().
     orElse(0);

İşte JavaDoc'a bağlantılar.

GraphicsEnvironment.getLocalGraphicsEnvironment ()
GraphicsEnvironment.getScreenDevices ()
GraphicsDevice.getDefaultConfiguration ()
GraphicsConfiguration.getBounds ()


2

Bu üç işlev, Java'daki ekran boyutunu döndürür. Bu kod, çoklu monitör kurulumlarını ve görev çubuklarını açıklar. Dahil edilen işlevler şunlardır: getScreenInsets () , getScreenWorkingArea () ve getScreenTotalArea () .

Kod:

/**
 * getScreenInsets, This returns the insets of the screen, which are defined by any task bars
 * that have been set up by the user. This function accounts for multi-monitor setups. If a
 * window is supplied, then the the monitor that contains the window will be used. If a window
 * is not supplied, then the primary monitor will be used.
 */
static public Insets getScreenInsets(Window windowOrNull) {
    Insets insets;
    if (windowOrNull == null) {
        insets = Toolkit.getDefaultToolkit().getScreenInsets(GraphicsEnvironment
                .getLocalGraphicsEnvironment().getDefaultScreenDevice()
                .getDefaultConfiguration());
    } else {
        insets = windowOrNull.getToolkit().getScreenInsets(
                windowOrNull.getGraphicsConfiguration());
    }
    return insets;
}

/**
 * getScreenWorkingArea, This returns the working area of the screen. (The working area excludes
 * any task bars.) This function accounts for multi-monitor setups. If a window is supplied,
 * then the the monitor that contains the window will be used. If a window is not supplied, then
 * the primary monitor will be used.
 */
static public Rectangle getScreenWorkingArea(Window windowOrNull) {
    Insets insets;
    Rectangle bounds;
    if (windowOrNull == null) {
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        insets = Toolkit.getDefaultToolkit().getScreenInsets(ge.getDefaultScreenDevice()
                .getDefaultConfiguration());
        bounds = ge.getDefaultScreenDevice().getDefaultConfiguration().getBounds();
    } else {
        GraphicsConfiguration gc = windowOrNull.getGraphicsConfiguration();
        insets = windowOrNull.getToolkit().getScreenInsets(gc);
        bounds = gc.getBounds();
    }
    bounds.x += insets.left;
    bounds.y += insets.top;
    bounds.width -= (insets.left + insets.right);
    bounds.height -= (insets.top + insets.bottom);
    return bounds;
}

/**
 * getScreenTotalArea, This returns the total area of the screen. (The total area includes any
 * task bars.) This function accounts for multi-monitor setups. If a window is supplied, then
 * the the monitor that contains the window will be used. If a window is not supplied, then the
 * primary monitor will be used.
 */
static public Rectangle getScreenTotalArea(Window windowOrNull) {
    Rectangle bounds;
    if (windowOrNull == null) {
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        bounds = ge.getDefaultScreenDevice().getDefaultConfiguration().getBounds();
    } else {
        GraphicsConfiguration gc = windowOrNull.getGraphicsConfiguration();
        bounds = gc.getBounds();
    }
    return bounds;
}

1
int resolution =Toolkit.getDefaultToolkit().getScreenResolution();

System.out.println(resolution);

1
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
double width = screenSize.getWidth();
double height = screenSize.getHeight();
framemain.setSize((int)width,(int)height);
framemain.setResizable(true);
framemain.setExtendedState(JFrame.MAXIMIZED_BOTH);

1

İşte sık kullandığım bir kod pasajı. Yerel monitör konumlarını korurken kullanılabilir tam ekran alanını (çoklu monitör kurulumlarında bile) döndürür.

public static Rectangle getMaximumScreenBounds() {
    int minx=0, miny=0, maxx=0, maxy=0;
    GraphicsEnvironment environment = GraphicsEnvironment.getLocalGraphicsEnvironment();
    for(GraphicsDevice device : environment.getScreenDevices()){
        Rectangle bounds = device.getDefaultConfiguration().getBounds();
        minx = Math.min(minx, bounds.x);
        miny = Math.min(miny, bounds.y);
        maxx = Math.max(maxx,  bounds.x+bounds.width);
        maxy = Math.max(maxy, bounds.y+bounds.height);
    }
    return new Rectangle(minx, miny, maxx-minx, maxy-miny);
}

Sol ekranın ana monitör olarak ayarlandığı iki tam HD monitörü olan bir bilgisayarda (Windows ayarlarında), işlev geri döner

java.awt.Rectangle[x=0,y=0,width=3840,height=1080]

Aynı kurulumda, ancak sağ monitör ana monitör olarak ayarlandığında, işlev geri döner

java.awt.Rectangle[x=-1920,y=0,width=3840,height=1080]

0
int screenResolution = Toolkit.getDefaultToolkit().getScreenResolution();
System.out.println(""+screenResolution);

Stack Overflow'a hoş geldiniz! Bu kod snippet'i soruyu çözebilir, ancak bir açıklama da dahil olmak üzere , yayınınızın kalitesini artırmaya yardımcı olur. Gelecekte okuyucular için soruyu cevapladığınızı ve bu kişilerin kod önerinizin nedenlerini bilmeyebileceğini unutmayın. Lütfen kodunuzu açıklayıcı yorumlarla doldurmamaya çalışın, bu hem kodun hem de açıklamaların okunabilirliğini azaltır!
kayess
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.