Как сделать приложение колебания, знающее об изменении размера экрана?

в то время как мое приложение колебания работает, я изменяю размер экрана (например, от 1024x768 до 800x600).

Есть ли какое-либо событие, которое я могу слушать, чтобы быть уведомленным об этом?

Кроме того, я мог проверить размер экрана через каждые несколько секунд, но Toolkit.getScreenSize () продолжает говорить мне старое значение.
Как я мог получить реальный размер экрана после изменения?

Среда: Linux (протестированный на SuSE ES 11 и Ubuntu 9.04)

Я признателен за Вашу помощь.
Marton

6
задан Marton Sigmond 8 June 2010 в 13:44
поделиться

2 ответа

У меня сработало следующее, но я использую 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

Очевидно, что если у вас несколько экранных устройств, вам придется проявлять большую осторожность.

2
ответ дан 17 December 2019 в 20:29
поделиться

Чтобы вычислить размер дисплея, вы можете использовать (взято из 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 и собственный код. Если ваше окно верхнего уровня развернуто, изменение размера дисплея также приведет к изменению размера любых развернутых окон, так что вы также можете отслеживать изменения там. См. Этот учебник , где приведены примеры написания слушателей компонентов.

Если у вас нет развернутого окна верхнего уровня, вы также можете добиться того же эффекта, создав скрытое развернутое окно. Точно не могу сказать, сработает ли это, но попробовать стоит.

1
ответ дан 17 December 2019 в 20:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: