簡體   English   中英

Java(Awt)中的全屏窗口事件在哪里?

[英]Where is the full-screen window event in Java (Awt)?

我已經檢查了WindowListener接口的方法,但沒有為此事件或調整窗口大小的事件。 (實際上,是從Component類繼承了一個調整大小的事件:( link )但這僅是全部。.有人可以教我如何在用戶觸發全屏顯示或離開全屏的情況下執行某些操作嗎?

//通過全屏顯示是指最大化:))

如果通過“全屏觸發”是指最大化窗口,則不應使用ComponentListener。 您想要的是WindowStateListener

private static boolean isMaximized(int state) {
    return (state & Frame.MAXIMIZED_BOTH) == Frame.MAXIMIZED_BOTH;
}

// ...

    frame.addWindowStateListener(new WindowStateListener() {
        public void windowStateChanged(WindowEvent event) {
            boolean isMaximized = isMaximized(event.getNewState());
            boolean wasMaximized = isMaximized(event.getOldState());

            if (isMaximized && !wasMaximized) {
                System.out.println("User maximized window.");
            } else if (wasMaximized && !isMaximized) {
                System.out.println("User unmaximized window.");
            }
        }
    });

如果“觸發全屏”是指真正的全屏窗口 ,則ComponentListener可能可以工作,盡管我沒有嘗試過。 由於只有在代碼調用GraphicsDevice.setFullScreenWindow ,才會出現真正的全屏窗口,因此您可能希望在該調用之后立即添加代碼:

if (userPressedFullScreenButton) {
    frame.getGraphicsConfiguration().getDevice().setFullScreenWindow(frame);
    System.out.println("User switched to full-screen.");
} else if (userPressedManagedWindowButton) {
    frame.getGraphicsConfiguration().getDevice().setFullScreenWindow(null);
    System.out.println("User switched out of full-screen.");
}

您可以添加一個新的ComponentListener來檢測屏幕是否已調整大小,然后如果新大小等於屏幕分辨率大小,則可以進行匹配。

    JFrame frame = new JFrame();

    frame.addComponentListener(new ComponentListener() {

        @Override
        public void componentHidden(ComponentEvent arg0) {}

        @Override
        public void componentMoved(ComponentEvent arg0) {}

        @Override
        public void componentResized(ComponentEvent e) {
            Component c = e.getComponent();

            Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
            double width = screenSize.getWidth();
            double height = screenSize.getHeight();

            if (width == c.getWidth() - 16 && height == c.getHeight() - 16)
                System.out.println("User entered fullscreen");
        }

        @Override
        public void componentShown(ComponentEvent arg0) {}

    });

說明:

每當用戶調整框架大小時,都會調用ComponenetListener#componentResized 根據您的問題,您要檢測用戶是否已進入全屏狀態。

因此,在componentResized方法中,我檢查窗口的新寬度和高度是否等於用戶的屏幕分辨率。 我必須將新的寬度和高度減去16,因為它們是窗口邊框的偏移量。 但是,如果您將使用未裝飾的窗口,那么您不應減去我的想法。

希望能幫助到你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM