繁体   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