在Java Swing中有没有办法查找和关闭当前显示的所有JDialog
个对象?
我有一个大型应用程序,有多个部分可以调用显示对话框,但我希望能够从一个点检测并关闭它。
答案 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();
}
}
}