如何回到Java中的JFrames

Chr*_*tis 4 java swing jframe

我在JFrame中有一个按钮,如果按下它,它会将我们带到另一个框架.我用过这段代码:

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {

    SecondForm secondform = new SecondForm();
    secondform.setVisible(true);
    setVisible(false);
    dispose();
    }
Run Code Online (Sandbox Code Playgroud)

所以新框架打开,一切正常.然后我在第二帧中放置了另一个按钮 - 以便返回到前一帧.我用过这段代码:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         

    MainForm Mform = new MainForm();
    Mform.setVisible(true);
    setVisible(false);
    dispose();
}                                        
Run Code Online (Sandbox Code Playgroud)

问题是,我不认为这是正确的方法.我想要的是:

  • 隐藏第一帧
  • 展示新的第二个
  • 处理第二个
  • 再次显示第一个

有没有办法使用第一个MainForm实例,而不是每次我想要返回时创建一个新实例.我监控我的程序,每次我来回移动框架,正如我所怀疑的那样,它使用的ram不断增加.

提前致谢.

编辑:我有一个登录系统,当用户输入正确的凭据时,会创建一个新的ManiForm实例.

MainForm Mform = new MainForm();
Mform.setVisible(true);
Run Code Online (Sandbox Code Playgroud)

那是我想要使用的实例.有没有办法让第二种形式的MForm再次可见?

首先感谢您的帮助!

我同意不使用多个JFrame更容易,但是请您告诉我哪个更好的方式来做我在第一篇文章中提出的问题?罗宾给我的答案非常好,但我不知道该把什么作为一个论点*:

java.awt.EventQueue.invokeLater(new Runnable() {

        public void run() {
    *   new SecondForm().setVisible(true);
        }
    });
Run Code Online (Sandbox Code Playgroud)

它来自NetBeans的自动生成代码.

我试过了

new SecondForm(super).setVisible(true);
Run Code Online (Sandbox Code Playgroud)

但我仍然遇到编译错误.显然我必须放,super.something()但我不知道是什么.我尝试了很多但没有运气.

Mar*_*inL 9

你不应该使用超过一帧.

你应该在JFrame中有NOTHING,除了defaultExitOperation,size,preferedsize和visible true.而是将所有按钮和字段放入JPanel,并从JFrame添加/删除JPanel.

如果你想打开另一个Window,请使用JDialog.

顺便说一句:你可以让你的MainFrame setVisible为false,并打开一个JDialog,将你的MainFrame作为父级.只有当有人写下正确的用户+密码时,才能使主框架可见.

  • 应用程序中单个帧的+1以及子对话框. (2认同)