In Java Swing is there a way to find and close all JDialog objects currently being displayed?
I have a large application and there are multiple parts that can call to display a dialog but from one single point I want to be able to detect and close it.
Keep a reference to each of the dialogs (perhaps in a collection). When needed, iterate the collection and call dialog.setVisible(false).
As suggested by @mKorbel, you can also use:
Window[] windows = Window.getWindows();
You'd just need to check for the 'parent' window when iterating the array and closing things.
The class Window which superclasses JFrame has the method getOwnedWindows which you can use to get an array of all child (owned) Windows (including JFrames and 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();
}
}
Edit:
The question was changed to
find and close all
JDialogobjects currently being displayed
and I still assume they are all children of the same parent.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With