全部关闭 Java child windows

Close all Java child windows

在 Java Swing 中有没有办法找到并关闭当前显示的所有 JDialog objects?

我有一个大型应用程序,有多个部分可以调用以显示对话框,但我希望能够从一个点检测并关闭它。

保留对每个对话框的引用(可能在一个集合中)。需要时,迭代集合并调用 dialog.setVisible(false).

根据@mKorbel 的建议,您还可以使用:

Window[] windows = Window.getWindows();

您只需要在迭代数组和关闭事物时检查 'parent' window。

class Window superclasses JFrame 有方法 getOwnedWindows 你可以用它来得到所有 child(拥有)Windows(包括JFrames和JDialogs)。

public class DialogCloser extends JFrame {

    DialogCloser() {

        JButton closeChildren = new JButton("Close All Dialogs");
        JButton openDiag = new JButton("Open New Dialog");

        closeChildren.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {

                Window[] children = getOwnedWindows();
                for (Window win : children) {
                    if (win instanceof JDialog)
                        win.setVisible(false);
                }
            }
        });

        openDiag.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {

                JDialog diag = new JDialog(DialogCloser.this);
                diag.setVisible(true);
            }
        });

        getContentPane().add(openDiag, BorderLayout.PAGE_START);
        getContentPane().add(closeChildren, BorderLayout.CENTER);

        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        pack();
        setVisible(true);
    }

    public static void main(String[] args) {

        new DialogCloser();
    }
}

编辑:

问题改为

find and close all JDialog objects currently being displayed

而且我仍然认为它们都是 children 相同的 parent。

下面的一段代码可以解决问题:

private void closeAllDialogs()
{
    Window[] windows = getWindows();

    for (Window window : windows)
    {
        if (window instanceof JDialog)
        {
            window.dispose();
        }
    }
}