Полноэкранное масштабирование

У меня есть объект JFrame размером 1280 на 768 (в будущем я могу изменить его на 1024 на 768).

Я делаю окно полноэкранным, вызывая эту строку кода:

GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().setFullScreenWindow(window);

(Хотя «окно» - это мой объект JFrame)

Я мог видеть, что экран кажется полноэкранным, что мне очень нравится, но если я нарисую строку вот так:

g.drawString("Test!!!",100,100);

Я все еще мог видеть, что окно не масштабируется до разрешения JFrame .. (потому что строка нарисована в точке 100x100 моего экрана, которая составляет 1920x1080)

Я также пробовал использовать новый режим отображения:

DisplayMode display = new DisplayMode(1280, 768, 16, DisplayMode.REFRESH_RATE_UNKNOWN);
GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().setDisplayMode(display);

Но я продолжаю получать исключение UnsupportedOperationException:

Исключение в потоке «Thread-2» java.lang.UnsupportedOperationException: невозможно изменить режим отображения

Это что? мой монитор не поддерживает изменение режима отображения? или это просто неправильный способ? ..


person Orel Bitton    schedule 13.09.2013    source источник
comment
Вы можете проверить значение GraphicsDevice.isDisplayChangeSupported. Среди причин, по которым это может вернуть false: if isFullScreenSupported возвращает false, ваше полноэкранное окно будет смоделированным полноэкранным окном, и в этом случае изменение режима отображения запрещено.   -  person VGR    schedule 14.09.2013
comment
Он возвращает false на моем экране, есть ли альтернатива, которая может сработать с JFrame?   -  person Orel Bitton    schedule 14.09.2013


Ответы (1)


Я предлагаю не использовать метод Чан. Отладить код намного проще, если вы его не используете.

В официальном docs of Oracle вы найдете правильный путь. Ключевой частью решения вашей проблемы является то, что вы должны включить полноэкранный режим окна, прежде чем устанавливать режим отображения. Это способ разблокировать режим отображения для изменений и предоставить исключительные права на вашу программу. Просто вызовите setFullScreenWindow () перед установкой режима отображения.

Frame frame;
 DisplayMode newDisplayMode;
 GraphicsDevice gd;
 // create a Frame, select desired DisplayMode from the list of modes
 // returned by gd.getDisplayModes() ...

 if (gd.isFullScreenSupported()) {
     gd.setFullScreenWindow(frame);
 } else {
    // proceed in non-full-screen mode
    frame.setSize(...);
    frame.setLocation(...);
    frame.setVisible(true);
 }

 if (gd.isDisplayChangeSupported()) {  // Sometime it does return false, however the Display Change is still possible. So, this checking is not a must.
     gd.setFullScreenWindows(frame); // Important!! Call this before setDisplayMode, otherwise you'll got UnsupportedOperationExaption.
     gd.setDisplayMode(newDisplayMode);
 }
person technik    schedule 16.06.2016