Java:如何在打开另一个JFrame时关闭当前的JFrame?

5

我的程序以JFrame中带有文本字段的图片开始。当用户输入"start"时,我希望它关闭图片JFrame并打开另一个包含主程序的JFrame。我尝试在图片窗口中使用

processEvent(new WindowEvent(this, WindowEvent.WINDOW_CLOSING));

但它会关闭所有窗口。

12个回答

9
方法JFrame.setVisible可以根据参数隐藏或显示JFrame,而JFrame.dispose实际上会“销毁”框架,关闭它并释放它所使用的资源。如果您打算重新打开该窗口,则应在图片帧上调用setVisible(false),或者在不再打开它时在图片帧上调用dispose(),这样您的程序就可以释放一些内存。然后,在主框架上调用setVisible(true)使其可见。

3
你也可以使用这段代码。
例如:
  JFrame frame = new JFrame();
  frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);

2

如果您将图片JFrame的默认关闭操作设置为除EXIT_ON_CLOSE之外的其他选项,例如DISPOSE_ON_CLOSE,则可以防止第二个JFrame出现之前应用程序关闭。


1
我曾经搜索过同样的问题,发现使用 "this" 是最好和最简单的选择。 你可以使用以下代码: this.dispose();

1
这篇文章有点老,但仍然有用。
如果您像这样初始化表单:
JFrame firstForm = new JFrame();

firstForm.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
firstForm.setSize(800, 600);
firstForm.setLocationRelativeTo(null);

firstForm.setVisible(true);

例如,通过按钮创建或打开另一个表单:

JFrame secondForm = new JFrame();

secondForm.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
secondForm.setSize(800, 600);
secondForm.setLocationRelativeTo(null);

secondForm.setVisible(true);

this.dispatchEvent(new WindowEvent(this, WindowEvent.WINDOW_CLOSING));

这将销毁第一个窗口,而不退出程序。
关键是设置setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE)
它还会触发事件(我已经用WindowClosing事件进行了测试)。

1

这是我解决该问题的方案:

public void actionPerformed(ActionEvent e) {
    String userName =  textField.getText();
    String password = textField_1.getText();
    if(userName.equals("mgm") &&  password.equals("12345")) {            
         secondFrame nF = new secondFrame();

         nF.setVisible(false);
         dispose();          
    }   
    else 
    {
        JOptionPane.showMessageDialog(null, " Wrong password ");
    }
}

0

对于NetBeans,使用当前对象的引用和 setVisible(false); 例如

private void submitActionPerformed(java.awt.event.ActionEvent evt)
{                                
    // TODO add your handling code here:
    this.setVisible(false);//Closing the Current frame
    new login().setVisible(true);// Opening a new frame
}                                     

0

首先调用它

new Window().nextjframe.setVisible(true);
thisjframe.setVisible(false);

0

你也可以使用这个:

opens_frame frameOld= new opens_frame();
            frameOld.setVisible(true);
            Closing_Frame.setVisible(false);
            Closing_Frame.dispose();

0
private void closeTheCurrentFrameAndOpenNew(java.awt.event.ActionEvent evt){

 dispose();//To close the current window

 YourClassName closeCurrentWindow = new YourClassName();
 closeCurrentWindow.setVisible(true);//Open the new window

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接