全部关闭 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(拥有)Window
s(包括JFrame
s和JDialog
s)。
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();
}
}
}
在 Java Swing 中有没有办法找到并关闭当前显示的所有 JDialog
objects?
我有一个大型应用程序,有多个部分可以调用以显示对话框,但我希望能够从一个点检测并关闭它。
保留对每个对话框的引用(可能在一个集合中)。需要时,迭代集合并调用 dialog.setVisible(false)
.
根据@mKorbel 的建议,您还可以使用:
Window[] windows = Window.getWindows();
您只需要在迭代数组和关闭事物时检查 'parent' window。
class Window
superclasses JFrame
有方法 getOwnedWindows
你可以用它来得到所有 child(拥有)Window
s(包括JFrame
s和JDialog
s)。
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();
}
}
}