в то время как мое приложение колебания работает, я изменяю размер экрана (например, от 1024x768 до 800x600).
Есть ли какое-либо событие, которое я могу слушать, чтобы быть уведомленным об этом?
Кроме того, я мог проверить размер экрана через каждые несколько секунд, но Toolkit.getScreenSize () продолжает говорить мне старое значение.
Как я мог получить реальный размер экрана после изменения?
Среда: Linux (протестированный на SuSE ES 11 и Ubuntu 9.04)
Я признателен за Вашу помощь.
Marton
У меня сработало следующее, но я использую Mac, поэтому не могу сказать, что уверен, что он будет работать в Linux:
System.out.println(GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[0].getDisplayMode().getWidth() + "x" + GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[0].getDisplayMode().getHeight());
//Ignore this block, it was simply to give me a chance to change my resolution
Scanner readUserInput=new Scanner(System.in);
System.out.println("Waiting on input, go change your resolution");
String myName=readUserInput.nextLine();
System.out.println(GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[0].getDisplayMode().getWidth() + "x" + GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[0].getDisplayMode().getHeight());
Результат (на самом деле это вход) был следующим:
1440x900
Waiting on input, go change your resolution
blah
1280x960
Очевидно, что если у вас несколько экранных устройств, вам придется проявлять большую осторожность.
Чтобы вычислить размер дисплея, вы можете использовать (взято из GraphicsConfiguration javadoc)
Rectangle virtualBounds = new Rectangle();
GraphicsEnvironment ge = GraphicsEnvironment.
getLocalGraphicsEnvironment();
GraphicsDevice[] gs =
ge.getScreenDevices();
for (int j = 0; j < gs.length; j++) {
GraphicsDevice gd = gs[j];
GraphicsConfiguration[] gc =
gd.getConfigurations();
for (int i=0; i < gc.length; i++) {
virtualBounds =
virtualBounds.union(gc[i].getBounds());
}
}
Затем вы можете запросить ширину
и высоту
из ] virtualBounds
.
Это также будет работать в настройках с несколькими мониторами.
Насколько мне известно, не существует поддерживаемого JDK метода для обнаружения изменений, поэтому единственная ставка - опрос, либо используйте JNA и собственный код. Если ваше окно верхнего уровня развернуто, изменение размера дисплея также приведет к изменению размера любых развернутых окон, так что вы также можете отслеживать изменения там. См. Этот учебник , где приведены примеры написания слушателей компонентов.
Если у вас нет развернутого окна верхнего уровня, вы также можете добиться того же эффекта, создав скрытое развернутое окно. Точно не могу сказать, сработает ли это, но попробовать стоит.