2

所以我有 2 个 Java 类,每个类都创建一个 JFrame,其中包含各种组件。每个类都有自己的addComponentsToPane(...)方法来设置框架的内容。this 用于在createAndShowGui()类的 main 方法中调用的方法中。

让我们称它们为 A 类和 B 类。所以事情是,在 AI 中有一个按钮,当单击该按钮时,会启动 B(简单调用B.main(null)。我想要做的是,让它在单击按钮时,它会打开窗口B,但如果再次单击它不会。现在,我几乎可以通过简单地设置一个布尔值来管理这个,但问题当然是如果我单击一次,窗口就会打开,这很好......但是如果我关闭窗口 B 并再次单击 A 中的相应按钮没有任何反应……因为布尔值仍然表示 B 已打开。

所以我想知道的是,鉴于这种设置,有没有一种方法可以在 B 关闭时重置 A 中的布尔值?我在想也许我可以用 B 中的 a 做一些事情,WindowListener但如果这是一个可能的解决方案,那么我直到还没弄清楚要配置它做什么..

4

2 回答 2

2

不要破坏B或将引用设置为null,关闭时将其隐藏即可。您可以在应用程序启动时隐藏它,或者只是从 A 按需创建它。

A.Button 然后调用 --> B.show()。

如果 B 是 JFrame(它可能应该是),您可以通过调用来设置关闭“X”时的行为JFrame.setDefaultCloseOperation()。默认应该已经是 WindowConstants.HIDE_ON_CLOSE.

于 2013-08-08T08:15:56.163 回答
1

基本上你要做的就是让一个框架成为你的“主要”框架,这意味着它包含主要方法。在您的情况下,这将是您的框架 A。然后使框架 B(而不是使用 JDialog 而不是 JFrame)成为框架 A 的一部分。

就像是:

public MainApp extends JFrame { // Frame A
    ...
    private static CustomWindowB FrameB = null;
    ...
    public static void main(String[] args){
       super();
       FrameB = new CustomWindowB(...);
       ...
    }
    ...
    public void FunctionCalledByButtonClick(){
        if(FrameB == null){
           FrameB = new CustomWindowB(...);
        } else {
           if(FrameB.isVisible()){
              FrameB.hide();
           } else {
              FrameB.show();
           }
        }
    }
 }

而对于 B 你可以这样做:

public CustomWindowB extends JDialog {  // Frame B

   public CustomWindowB(...){
      super();
      ...
      this.setVisible(true);
   }

   public void hide(){
      this.setVisisble(false);
   }

   public void show(){
      this.setVisisble(true);
   }
}
于 2013-08-08T07:24:19.337 回答