我有一个小帧,其中请问用户密码。此帧将在主窗口中打开点击按钮上方。

然后,我有两个按钮: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 即可。 希望这会帮助你。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top