Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Close all Java child windows

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.

like image 591
haz hazzz Avatar asked Jun 20 '26 04:06

haz hazzz


2 Answers

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.

like image 106
Andrew Thompson Avatar answered Jun 22 '26 19:06

Andrew Thompson


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 JDialog objects currently being displayed

and I still assume they are all children of the same parent.

like image 34
user1803551 Avatar answered Jun 22 '26 20:06

user1803551



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!