关闭所有Java子窗口

时间:2015-04-25 00:07:08

标签: java swing jdialog

在Java Swing中有没有办法查找和关闭当前显示的所有JDialog个对象?

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

3 个答案:

答案 0 :(得分:4)

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

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

Window[] windows = Window.getWindows();

在迭代数组和关闭数据时,你只需要检查'父'窗口。

答案 1 :(得分:2)

超类Window的类JFrame具有方法getOwnedWindows,您可以使用该方法获取所有子(拥有)Window的数组(包括{{1} s和JFrame s)。

JDialog

修改

问题已更改为

  

查找并关闭当前正在显示的所有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(); } } 个对象

我仍然认为他们都是同一父母的孩子。

答案 2 :(得分:1)

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

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

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