2009-02-21 102 views
7

我有一个小框架,我要求用户&密码。点击主窗口中的按钮即可打开该框架。java swing关闭窗口无需退出应用程序

然后我有两个按钮:好的,取消。

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

我该怎么做?

回答

18

您可以使用Frame.hide()或Frame.dispose()。 我也建议看看JDialog或JOptionPane

纠错:hide()已弃用。应该使用SetVisible(false)代替

+0

好的,以及如果我的点击处理程序进入框架的不同类extarnal? – Giancarlo 2009-02-21 16:33:18

+0

您必须将引用传递给点击处理程序(在构造函数中) – TofuBeer 2009-02-21 17:05:20

2

确保你不这样做:

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
+0

这不是我的问题伙伴:) – Giancarlo 2009-02-21 16:36:19

1

做一个函数在外部类中,你正在实施JFrame(您需要关闭在按下取消按钮)。
在该函数的执行中写入this.setVisible(false);
当你想关闭它时,最后在ActionListener实现中调用这个函数。

3

也许更清洁的方法就是改变setDefaultCloseOperation从EXIT_ON_CLOSE到DISPOSE_ON_CLOSE:

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
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); 
     } 
    } 

} 

如果您正在使用内部类处理事件 只需更换 'this.dispose()' 与Super_Class_Name.this.dispose();

1

你可以做到这一点在很多方面,但是这两种方式是最合用一个
1.写this.setVisible(false)在内部实现ActionListener
或者
2.写this.dispose()内部实现ActionListener。 希望这会帮助你。

2

setVisible方法不释放内存资源,只有当表单再次使用时才应使用。

dispose方法释放此Window,其子组件及其所有子级使用的所有本机屏幕资源。也就是说,这些组件的资源将被销毁,它们消耗的所有内存将被返回到操作系统,并且它们将被标记为不可显示。