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

时间:2014-08-29 12:59:21

标签: java swing events window awt

我已经检查了WindowListener接口的方法,但它没有这个事件,或者用于调整窗口大小。 (实际上有一个从Component类继承的resized事件:(link)但是那就是全部..如果用户触发全屏或离开它,有人可以告诉我如何做某事吗?

//全屏我的意思是最大化:))

2 个答案:

答案 0 :(得分:2)

如果通过“触发全屏”指的是最大化窗口,则不应使用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.");
            }
        }
    });

如果通过“触发全屏”表示真正的full-screen 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.");
}

答案 1 :(得分:0)

您可以添加新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,因为它们是窗口边框的偏移量。但是,如果您使用未修饰的窗口,那么您不应该减去我认为。

希望它有所帮助。