的Java Swing关闭窗口,而无需退出应用程序
题
我有一个小帧,其中请问用户密码。此帧将在主窗口中打开点击按钮上方。
然后,我有两个按钮:OK和Cancel
。当我点击“取消”按钮,我需要关闭该帧而不退出该应用。
我怎么能这样做?
解决方案
您可以使用Frame.hide()或Frame.dispose()。 我还建议寻找到的JDialog或JOptionPane的
校正:隐藏()已过时。调用setVisible(假),而应使用
其他提示
也许更清洁的方式只是改变从EXIT_ON_CLOSE的setDefaultCloseOperation到DISPOSE_ON_CLOSE:
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
可以在框架上调用调用setVisible(假)。
您可能也想在这里呼吁传递HIDE_ON_CLOSE框架上setDefaultCloseOperation(信息:的 http://java.sun.com/javase/6/docs/api/javax/swing/JFrame.html#setDefaultCloseOperation%28int%29 ) 。这将阻止应用如果用户点击“X”上的JFrame关闭它要离开。
在当用户名/密码成功动作监听方法使用this.dispose();
。例如:
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);
}
}
}
如果使用的是内部类处理事件 只需更换 'this.dispose()' 与Super_Class_Name.this.dispose();
请确保您不会:
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
调用setVisible方法不释放内存资源和应使用只有当形式被再次使用。
的处置方式释放由此Window,其子组件所使用的本机屏幕资源,其拥有的所有儿童。也就是说,这些组件的资源将被破坏,它们使用的所有内存都将返回到操作系统,它们将被标记为不可。
请在外部类的功能,你正在实施JFrame
(您需要关闭在按下取消按钮)。点击
在该功能的实现写this.setVisible(false);
。结果
当你想关闭它最后调用在ActionListener
实现此功能。
您可以做到这一点在很多方面,但是这两种方式是最合用一个结果
1.写入的 this.setVisible(false)
强>在内部实现的 ActionListener
强>结果
或点击
2.写入的 this.dispose()
强>内部实现的 ActionListener
即可。
希望这会帮助你。