我怎么能得到我的应用程序的可见窗口数量?

时间:2011-08-15 11:13:45

标签: java swing window awt jframe

或更确切地说:

如果任何其他窗口仍然可见,我需要知道窗口关闭事件。

如果没有,则会调用System.exit(0)

4 个答案:

答案 0 :(得分:4)

1)I need to know on a window close event

WindowConstantsWindowEvent

2)if any other window is still visible.

使用Window[] wins = Window.getWindows();来测试其可见性或添加Top-Level Containers

,您可以获得WindowStateListener的数量

一些重要的通知here

答案 1 :(得分:2)

尝试

if(Frame.getFrames().length == 0) {
    // work here.
}

Framejava.awt.Frame,即JFrame的父级,因此您也会捕获它们。

答案 2 :(得分:2)

感谢大家的回答。有了这个帮助,我设法找到了一个有效的解决方案:

奇怪,它不适用于windowClosed。仅适用于windowClosing

代码

public final class CloseOnLastWindowListener extends WindowAdapter {

    @Override
    public void windowClosing(WindowEvent e) {
        System.out.println("\tCLOSING!!!");

        int nRelevant = 0;
        for (Window w : Window.getWindows()) {
            // get only visible windows, except the one being closed
            if (w != e.getWindow() && w.isVisible()) {
                System.out.println("\tRELEVANT: " + w);
                ++nRelevant;
            } else {
                System.out.println("\tirrelevant: " + w);
            }
        }

        if (nRelevant == 0) {
            System.out.println("\tEXIT!!!");
            System.exit(0);
        }
    }
}

答案 3 :(得分:1)

  

我需要知道窗口关闭事件,如果还有其他窗口仍然可见。如果没有,将调用System.exit(0)。

只需使用:

frame.dispose();

当最后一个窗口关闭时,JVM将自动退出。

或者在创建框架和对话框时使用:

frame.setDefaultCloseOperation(JFrema.DISPOSE_ON_CLOSE);