JuanDeLosMuertos
JuanDeLosMuertos

Reputation: 4620

java swing close window without exiting app

I have a little frame where I ask user & password. This frame will be opened clicking over a button in a main window.

Then I have two buttons: ok and cancel.

When I click on "cancel" button, I need to close this frame without exiting the app.

How can I do that?

Upvotes: 8

Views: 66746

Answers (8)

Edgard Leal
Edgard Leal

Reputation: 2720

setVisible method does not release memory resources and should be used only when the form is to be used again.

The dispose method Releases all of the native screen resources used by this Window, its subcomponents, and all of its owned children. That is, the resources for these Components will be destroyed, any memory they consume will be returned to the OS, and they will be marked as undisplayable.

Upvotes: 2

Qadir Hussain
Qadir Hussain

Reputation: 1263

You can do it in many ways but these two ways are most usable one
1. write this.setVisible(false) in inside implemented ActionListener
Or
2. write this.dispose() inside implemented ActionListener. Hope this will help you.

Upvotes: 1

Alan
Alan

Reputation: 31

Use this.dispose(); in the action listener method when the username/password succeeds. eg:

public void actionPerformed(ActionEvent ae) {

    if(ae.getSource()=="button you press to confirm username/password"){
        if(userNameTf.getText().equals(username)&&isPassword(passwordTf.getPassword())){
            new "window to be opened upon success"
            this.dispose(); // calls dispose on this object ie. 
                                            // the login window 
        }
        else{
            userNameTf.setText("");
            passwordTf.setText("");

            JOptionPane.showMessageDialog(this,
                    "Username and/or password is incorrect!",
                    "Attention!",
                    JOptionPane.WARNING_MESSAGE);
        }
    }

}

If you are using inner classes to handle the events just replace 'this.dispose()' with Super_Class_Name.this.dispose();

Upvotes: 3

aleroot
aleroot

Reputation: 72626

Maybe a cleaner way is just change the setDefaultCloseOperation from EXIT_ON_CLOSE to DISPOSE_ON_CLOSE :

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

Upvotes: 4

Anna
Anna

Reputation: 11

Make a function in outer class where you are implementing the JFrame (you need to close on pressing cancel button).
Write this.setVisible(false); in the implementation of that function.
Finally call this function in the ActionListener implementation when you want to close it.

Upvotes: 1

TofuBeer
TofuBeer

Reputation: 61526

You can call setVisible(false) on the frame.

You might also want to call setDefaultCloseOperation on the frame passing in HIDE_ON_CLOSE (info here: http://java.sun.com/javase/6/docs/api/javax/swing/JFrame.html#setDefaultCloseOperation%28int%29). That will prevent the app from going away if they user hits the "X" on the JFrame to close it.

Upvotes: 3

jedierikb
jedierikb

Reputation: 13079

Make sure you do not:

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Upvotes: 2

Itay Maman
Itay Maman

Reputation: 30723

You can use either Frame.hide() or Frame.dispose(). I would also recommend to look into JDialog or JOptionPane

Correction: hide() is deprecated. SetVisible(false) should be used instead

Upvotes: 21

Related Questions