Java Toolkit Получение второго размера экрана - PullRequest
9 голосов
/ 12 июня 2011

У меня есть два экрана, подключенных к моему компьютеру, и мне было интересно, есть ли способ в JFrame или Toolkit определить, на каком экране окно?

У меня есть этот код:

java.awt.Toolkit.getDefaultToolkit().getScreenSize();

Какой размер моего основного экрана соответствует моему, но как узнать размер второго экрана или определить, на каком экране находится окно?

Ответы [ 4 ]

13 голосов
/ 12 июня 2011

Вам следует взглянуть на GraphicsEnvironment .

В частности, getScreenDevices():

Возвращает массив всех экранных объектов GraphicsDevice.

Размеры можно получить из этих GraphicDevice объектов (косвенно, через getDisplayMode).(На этой странице также показано, как поместить рамку на определенное устройство.)

И вы можете перейти от JFrame к его устройству с помощью метода getGraphicsConfigration(), который возвращает GraphicsConfiguration , которая имеет getDevice().(Метод getIDstring(), вероятно, позволит вам различать экраны.)

7 голосов
/ 12 июня 2011

Проверьте эту тему в StackOverflow . Код из OP использует этот код:

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice[] gs = ge.getScreenDevices();
for(GraphicsDevice curGs : gs)
{
      GraphicsConfiguration[] gc = curGs.getConfigurations();
      for(GraphicsConfiguration curGc : gc)
      {
            Rectangle bounds = curGc.getBounds();

            System.out.println(bounds.getX() + "," + bounds.getY() + " " + bounds.getWidth() + "x" + bounds.getHeight());
      }
 }

Вывод был:

0.0,0.0 1024.0x768.0 
0.0,0.0 1024.0x768.0 
0.0,0.0 1024.0x768.0 
0.0,0.0 1024.0x768.0 
0.0,0.0 1024.0x768.0 
0.0,0.0 1024.0x768.0 
1024.0,0.0 1024.0x768.0 
1024.0,0.0 1024.0x768.0 
1024.0,0.0 1024.0x768.0 
1024.0,0.0 1024.0x768.0 
1024.0,0.0 1024.0x768.0 
1024.0,0.0 1024.0x768.0 

Итак, вы можете видеть, что он возвращает два экрана. У него было два экрана 1024x768, расположенных рядом друг с другом. Код можно оптимизировать, так как вам нужны только ширина и высота:

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice[] gs = ge.getScreenDevices();
for(GraphicsDevice curGs : gs)
{
      DisplayMode dm = curGs.getDisplayMode();
      System.out.println(dm.getWidth() + " x " + dm.getHeight());
}
1 голос
/ 12 июня 2011

Если вы используете код, показанный здесь , вы можете перебрать все GraphicsDevice в системе и получить их размеры. Учитывая, что вы можете создать JFrame на определенном GraphicsDevice, вы также можете извлечь конкретное GraphicsDevice, на котором находится JFrame, получив окно JFrame, вызвав http://download.oracle.com/javase/6/docs/api/java/awt/Window.html#getGraphicsConfiguration() в Window и затем вызвав getGraphicsDevice на этом.

0 голосов
/ 03 июля 2015

Прямо к коду, попробуйте это :)

    GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
    GraphicsDevice[] gs = ge.getScreenDevices();
    for (int i = 0; i < gs.length; i++) {
        System.out.println(gs[i].getDisplayMode().getWidth()+" "+gs[i].getDisplayMode().getHeight());

        //System.out.println(java.awt.Toolkit.getDefaultToolkit().getScreenSize());
        // to check default resolution of the device
    }
...