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

Java(Awt)中的全屏窗口事件在哪里?,java,swing,events,window,awt,Java,Swing,Events,Window,Awt,我已经检查了WindowListener接口的方法,但它没有用于此操作或调整窗口大小的事件。(实际上有一个从组件类继承的调整大小的事件:(),但仅此而已..如果用户触发全屏或离开它,有人能告诉我如何做吗 //全屏是指最大化:)您可以添加一个新的组件侦听器来检测屏幕是否已调整大小,然后您可以匹配新大小是否等于屏幕分辨率大小 示例 JFrame frame = new JFrame(); frame.addComponentListener(new ComponentListene

我已经检查了WindowListener接口的方法,但它没有用于此操作或调整窗口大小的事件。(实际上有一个从组件类继承的调整大小的事件:(),但仅此而已..如果用户触发全屏或离开它,有人能告诉我如何做吗


//全屏是指最大化:)

您可以添加一个新的
组件侦听器来检测屏幕是否已调整大小,然后您可以匹配新大小是否等于屏幕分辨率大小

示例

    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
将在用户每次调整帧大小时调用。根据您的问题,您希望检测用户是否已进入全屏

因此,在ComponentResistized方法中,我检查窗口的新宽度和高度是否等于用户的屏幕分辨率。我不得不将新的宽度和高度减去16,因为这是窗口边框的偏移量。然而,若你们使用未装饰的窗户,那个么我认为你们不应该减去

希望有帮助。

如果“触发全屏”指的是最大化窗口,则不应使用ComponentListener。您需要的是:

如果“触发全屏”,您的意思是真的,那么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.");
}

与其检查组件大小(我怀疑这是一个内容窗格或类似的东西,因此需要考虑边框),不如检查Frame.getExtendedState()(如果框架最大化);这样装饰就不重要了。你能详细说明一下在“GraphicsDevice.setFullScreenWindow”之后添加我自己的代码是什么意思吗?我必须覆盖什么?真正的全屏模式不是用户可以直接实现的;您需要提供用户可以按下的按钮、菜单项等,并且您自己的代码需要显式调用Java的方法。更新了我的答案,提供了更多详细信息。是的,对不起,我只希望用户最大化答案。我不可能是第一个把这两个搞混的人。。
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.");
}