java swing关闭窗口没有退出应用程序

我有一个小框架,我问用户和密码。 单击主窗口中的按钮将打开此框架。

然后我有两个按钮:确定和取消。

当我点击“取消”按钮时,我需要关闭此框架而不退出应用程序。

我怎样才能做到这一点?

您可以使用Frame.hide()或Frame.dispose()。 我还建议调查JDialog或JOptionPane

更正:不推荐使用hide()。 应该使用SetVisible(false)代替

您可以在帧上调用setVisible(false)。

您可能还想在传递HIDE_ON_CLOSE的帧上调用setDefaultCloseOperation(此处的信息: http : //java.sun.com/javase/6/docs/api/javax/swing/JFrame.html#setDefaultCloseOperation%28int%29 )。 如果用户点击JFrame上的“X”关闭它,这将阻止应用程序消失。

也许更简洁的方法就是将setDefaultCloseOperation从EXIT_ON_CLOSE更改为DISPOSE_ON_CLOSE:

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 

使用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); 在执行该function。
最后,如果要关闭它,请在ActionListener实现中调用此函数。

您可以通过多种方式实现这一目标,但这两种方式最为实用
1.在内部实现的ActionListener编写this.setVisible(false)
要么
2.在实现的ActionListener编写this.dispose() 。 希望这会帮助你。