我有一个小框架,我在其中询问用户和密码。单击主窗口中的按钮将打开此框架。
然后我有两个按钮:确定和取消。
当我点击“取消”按钮时,我需要在不退出应用程序的情况下关闭此框架。
我怎样才能做到这一点?
您可以使用 Frame.hide() 或 Frame.dispose()。我还建议查看 JDialog 或 JOptionPane
更正: hide() 已弃用。应该使用 SetVisible(false)
也许更清洁的方法是将 setDefaultCloseOperation 从 EXIT_ON_CLOSE 更改为 DISPOSE_ON_CLOSE :
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
您可以在框架上调用 setVisible(false)。
您可能还想在传入 HIDE_ON_CLOSE 的帧上调用 setDefaultCloseOperation(此处的信息:http: //java.sun.com/javase/6/docs/api/javax/swing/JFrame.html#setDefaultCloseOperation%28int%29)。如果用户点击 JFrame 上的“X”来关闭它,这将防止应用程序消失。
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 方法不会释放内存资源,仅应在再次使用表单时使用。
dispose方法释放此 Window、其子组件及其所有子组件使用的所有本机屏幕资源。也就是说,这些组件的资源将被销毁,它们消耗的任何内存都将返回给操作系统,并且它们将被标记为不可显示。
在要实现的外部类中创建一个函数JFrame
(您需要在按下取消按钮时关闭)。
编写this.setVisible(false);
该函数的实现。最后,当你想关闭它时
,在实现中调用这个函数。ActionListener
您可以通过多种方式做到这一点,但这两种方式是最有用的一种
1. 写入this.setVisible(false)
内部实现
或
2. 写入内部实现。希望这会帮助你。ActionListener
this.dispose()
ActionListener