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());
}
Если вы используете код, показанный здесь, вы можете перебрать все GraphicsDevice
S в системе и получить их размеры. Учитывая, что вы можете создать 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
}