Чтобы вычислить размер дисплея, вы можете использовать (взято из 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());
}
}
Затем вы можете запросить width
и height
из virtualBounds
.
Это также будет работать при настройке нескольких мониторов.
Насколько мне известно, не существует поддерживаемого JDK метода для обнаружения изменений, поэтому опрос - это ваша единственная ставка, или используйте JNA и собственный код. Если ваше окно верхнего уровня развернуто, то изменение размера дисплея также изменит все развернутые окна, так что вы также можете прослушивать изменения там. Смотрите этот учебник Sun для примеров написания компонентных слушателей.
Если у вас нет максимизированного окна верхнего уровня, вы также можете достичь того же эффекта, создав скрытое максимизированное окно. Я не могу точно сказать, сработает ли это, но стоит попробовать.