Reputation: 4620
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
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
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
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
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
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
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
Reputation: 13079
Make sure you do not:
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Upvotes: 2
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