Как мне установить для моих рамок режим «Без полей», «Оконный режим» и «Полный экран» в Java? - PullRequest
0 голосов
/ 30 марта 2020

Я использую GraphicsDevice для полного экрана моего Java окна, но я не знаю, как изменить эти настройки во время работы приложения.

public void act(java.awt.Frame window) {
        if (state == SCREEN.FULLSCREEN) {
            if (ev.isFullScreenSupported()) {
                isFullScreen = true;
                window.dispose();
                ev.setFullScreenWindow(window);
                window.setVisible(true);
            }
        }
        if (state == SCREEN.WINDOWED) {
            isFullScreen = false;
            window.dispose();
            ev.setFullScreenWindow(null);
            window.setUndecorated(false);
            window.setVisible(true);
        }
        if (state == SCREEN.BORDERLESS) {
            isFullScreen = true;
            window.dispose();
            ev.setFullScreenWindow(null);
            window.setUndecorated(true);
            window.setVisible(true);
        }
    }

Когда я запускаю это бесконечно, код просто создает новое окно снова и снова, но я хочу сделать так, чтобы экран менялся в зависимости от значения state.

1 Ответ

0 голосов
/ 01 мая 2020

Хотя мне приходилось менять параметры, все было довольно просто. Для полей вам нужно:

    public enum ScreenState {
        fullscreen, borderless, windowed, none
    };
    public static ScreenState current;
    private static GraphicsEnvironment env = 
    GraphicsEnvironment.getLocalGraphicsEnvironment();
    private static GraphicsDevice ev = env.getDefaultScreenDevice();

А для метода вы можете сделать что-то вроде:

public void changeWindow(ScreenState applied, JFrame frame) {

        if (applied == ScreenState.fullscreen && current != ScreenState.fullscreen) {
            if (ev.isFullScreenSupported()) {
                ev.setFullScreenWindow(frame);
            }
            current =  ScreenState.fullscreen;
        }
        if (applied == ScreenState.borderless && current != ScreenState.borderless) {
            frame.setUndecorated(true);
            frame.setExtendedState(Frame.MAXIMIZED_BOTH);
            current =  ScreenState.borderless;
        }
        if (applied == ScreenState.windowed && current != ScreenState.windowed) {
            frame.setUndecorated(false);
            // you can choose to make the screen fit or not
            frame.setExtendedState(Frame.MAXIMIZED_BOTH);
            current =  ScreenState.windowed;
        }
    }

Спасибо за те, кто потратил некоторое время, чтобы помочь мне!

...