JFrame 的 setVisible(false) 函数不会使 JFrame 消失

问题描述 投票:0回答:2

我试图在 JFrame 上创建一个按钮,导致 JFrame 消失并调用另一个 JFrame。当新的 JFrame 被关闭时,它应该会以相同的状态重新出现。

我可以成功调用新的 JFrame,但 setVisible(false) 函数似乎什么都不做。

这是我想让 JFrame 暂时消失的代码。首先是主课:

import javax.swing.*;

public class Main {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run () {
                JFrame NavigationGUITest = new JFrame();
                NavigationGUITest.setContentPane(new NavigationGUITest().NavigationButtonsPanel);
                NavigationGUITest.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                NavigationGUITest.pack();
                NavigationGUITest.setSize(300,400);
                NavigationGUITest.setVisible(true);
            }
        });
    }
}

然后我想要消失的框架的 JFrame 类(但拒绝消失):

import javax.swing.*;

public class Main {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run () {
                JFrame NavigationGUITest = new JFrame();
                NavigationGUITest.setContentPane(new NavigationGUITest().NavigationButtonsPanel);
                NavigationGUITest.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                NavigationGUITest.pack();
                NavigationGUITest.setSize(300,400);
                NavigationGUITest.setVisible(true);
            }
        });
    }
}

我为每个动作侦听器使用了不同的语法来说明我的问题在这两种情况下是如何出现的。

最后,这是我的 navigationGUITest.form:

<?xml version="1.0" encoding="UTF-8"?>
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="NavigationGUITest">
  <grid id="27dc6" binding="NavigationButtonsPanel" layout-manager="GridLayoutManager" row-count="2" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
    <margin top="0" left="0" bottom="0" right="0"/>
    <constraints>
      <xy x="20" y="20" width="500" height="400"/>
    </constraints>
    <properties/>
    <border type="none"/>
    <children>
      <component id="9b808" class="javax.swing.JButton" binding="CreateNewRecordBtn">
        <constraints>
          <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
        </constraints>
        <properties>
          <text value="Create a new record"/>
        </properties>
      </component>
      <component id="dbdac" class="javax.swing.JButton" binding="EditRecordBtn">
        <constraints>
          <grid row="1" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
        </constraints>
        <properties>
          <text value="Edit an existing record"/>
        </properties>
      </component>
    </children>
  </grid>
</form>

回顾一下。我的问题是:为什么按钮的 actionlistener 子句中的 setVisible(false) 不会导致 Navigation JFrame 消失?

我非常确定我错过了一些非常明显的东西,但对于我的生活我无法确定它是什么。

如果有人能向我指出,我将永远感激不已!

TIA

海梅

java swing jframe action jbutton
2个回答
0
投票

你犯了几次这个错误。

JFrame NavigationGUITest = new JFrame();
NavigationGUITest.setContentPane(new NavigationGUITest().NavigationButtonsPanel);

为什么要用

setContentPane
?试试吧。

NavigationGUITest navigationGUITest = new NavigationGUITest(); 

那么如果你必须的话。

navigationGUITest.setContentPane( navigationGUITest.NavigationButtonsPanel );

-1
投票

看代码摘录

public class NavigationGUITest extends JFrame {
    private JButton CreateNewRecordBtn;
    JPanel NavigationButtonsPanel;
    private JButton EditRecordBtn;

这里

JFrame NewRecordFrame = new JFrame("Create a new record");
NewRecordFrame.setContentPane(new JFrame().getContentPane()); // yet another new instance.

NewRecordFrame.setVisible(true);
setVisible(false);  //wrong one!!

你正在继承

JFrame
(这很少,如果有的话,是个好主意)。而且您还创建了一个新的
JFrame
实例。当您执行
setVisible(false)
时,您引用了错误的实例。当您设置 contentPane 时,您正在创建一个
third JFrame instance
!!!

我建议您查看Java教程并查看如何制作框架

你应该使用 Java 命名约定.

© www.soinside.com 2019 - 2024. All rights reserved.