Java Toolkit Получение второго размера экрана

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

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

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

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

4 ответа

Решение

Вы должны взглянуть на GraphicsEnvironment.

Особенно, getScreenDevices():

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

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

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

Проверьте эту тему на Stackru. Код из 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());
}

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

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

    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
    }
Другие вопросы по тегам