点击JButton后关闭jFrame

4

我在NetBeans中设计了两个JFrames。

当我点击“rules”按钮(即放置在JFrame1上)时,它会打开第二个JFrame(但JFrame2会覆盖在JFrame1的窗口上,这是我不想要的)。 在第二个JFrame中有一个“close”按钮。但是当我点击此按钮时,我希望JFrame1被打开,并且它也可以工作,但实际上JFrame2并没有关闭,而是JFrame1出现在JFrame2上面。

简而言之,主窗体是JFrame1。当我从JFrame1点击“rules”按钮时,它会在JFrame1上打开JFrame2,在JFrame2中有一个“close”按钮,当它被点击时,主窗体(即JFrame1)被启动,但是它是在JFrame2上启动的。

场景是JFframe1 -> JFrame2 -> JFrame1

现在我的问题是,点击“rules”按钮后,JFrame1应该关闭并显示JFrame2,反之亦然。


2
使用dispose()方法关闭您想要关闭的窗口。但是不建议使用多个JFrames,而应该考虑使用多个对话框或内部窗口。 - user2577094
2
您可能还想考虑使用多个JFrames,好的/坏的做法?。 使用框架进行表单切换基本上是非常糟糕的设计。 我会考虑使用JPanel作为应用程序的主要容器,并使用JTabbedPaneCardLayout让用户在它们之间切换 - 在我看来... - MadProgrammer
7个回答

9
假设您的按钮有一个 actionListener,在点击 "规则按钮" 后,输入以下内容:
      JFrame1.dispose();  //Remove JFrame 1
      JFrame2.setVisible(true) //Show other frame

接着为相反的反应逆转它们。

3

类似这样的代码应该出现在创建JFrame2的构造函数或方法中:

btnCancel.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        //call another method in the same class which will close this Jframe
        CloseFrame();
    }
});

这是关闭JFrame2的方法。

public void CloseFrame(){
    super.dispose();
}

不要仅仅给出代码,还要解释为什么这些代码需要在构造函数/方法中。 - Scott Solmer
抱歉,我忘了解释CloseFrame方法应该放在哪里。现在已经解释清楚了。 - Aleksey Dz

1

如果您已经有了一个actionListener,您应该添加以下内容:

JFrame1.dispose(); // 这将关闭该窗口

JFrame1 是您的窗口的名称。 如果您想打开另一个您拥有的窗口,请添加以下内容:

JFrame2.setVisible(true); // 这将使另一个窗口可见


0

这对我有用(Frame1 被称为 RegScreen,而 Frame2 被称为 MainScreen):

RegScreen.this.setVisible(false);

new MainScreen().setVisible(true);

希望这可以帮到您 :) Regscreen 是启动时打开的原始框架。

0

虽然我不是专家,但我也遇到了这个问题。如果你将第二个JFrame设置为隐藏状态,当你点击“取消”时,它会关闭第二个JFrame。

//this is the code for the "cancel" button action listener 
public void actionPerformed(ActionEvent e) {
    setVisible(false);//hides the second JFrame and returns to the primary

0
  1. 创建一个具有main()方法的MainClass。
  2. 使包含main()方法的MainClass封装您的JFrame1和JFrame2引用变量。除非有特定原因,请不要使JFrame1或JFrame2包含main()方法。
  3. 在某个JFrame对象中单击某个内容后,通过您的MainProgram.JFrame对象方法实例化/显示另一个JFrame对象并处理自身。

示例:

    //btn event inside 1st JFrame/window
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
         MainProgram.openResultsForm();  //MainProgram opens 2nd window
         MainProgram.queryEntryForm.dispose();   //MainProgam closes this,
                                                 //the 1st window
    }

0
如果这个不起作用,尝试这个。
JFrame1.dispose();  //Remove JFrame 1
      JFrame2.setVisible(true) //Show other frame
JFrame2.setVisible(true);
this.dispose();

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