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