Jason S
Jason S

Reputation: 189876

Programmatic close of JFrame

What's the programmatic equivalent of clicking the close (x) button in the upper right corner of a JFrame?

There's the dispose() method but that's not the same thing, since a JFrame can be set to do several different things upon closing (not to mention if there's a WindowListener involved)

Upvotes: 14

Views: 9113

Answers (3)

peterk
peterk

Reputation: 5444

You have to insert the call into the AWT message queue so all the timing happens correctly, otherwise it will not dispatch the correct event sequence, especially in a multi-threaded program.

public void closeWindow()
{
    if(awtWindow_ != null) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                awtWindow_.dispatchEvent(new WindowEvent(awtWindow_, WindowEvent.WINDOW_CLOSING));
            }
        });
    }
}

Upvotes: 0

Bill K
Bill K

Reputation: 62789

When you hit the x on a JFrame, the system can be set to do various things. The default is that the window is simply hidden with setVisible(false) I believe.

You can set a frame to do different things on close--you can have it dispose, hide or call code based on setDefaultCloseOperation. Here are the options:

DO_NOTHING_ON_CLOSE: Don't do anything; require the program to handle the operation in the windowClosing method of a registered WindowListener object.

HIDE_ON_CLOSE: Automatically hide the frame after invoking any registered WindowListener objects.

DISPOSE_ON_CLOSE: Automatically hide and dispose the frame after invoking any registered WindowListener objects.

EXIT_ON_CLOSE: Exit the application using the System exit method. Use this only in applications.

But I think what you are after is setVisible(false).

Upvotes: 2

jjnguy
jjnguy

Reputation: 138972

You tell the component to dispatch an event. In this case, you want it do dispatch a Window Closing event.

private void exit() {
    this.dispatchEvent(new WindowEvent(this, WindowEvent.WINDOW_CLOSING));
}

Upvotes: 17

Related Questions