在几个JFrame和类中传递变量

时间:2013-04-07 17:28:08

标签: java swing jframe

对不起,伙计们,但是经过几个小时的谈话后我感到很困惑。

情况:

我有两个JFrame。这些是不同的Java类 - 其中一个是FirstGUI,我们可以从中调用另一个名为SecondGUI的JFrame。好的 - 很清楚。 我还有一个名为Processor的类,其中我有特定的方法,如“connectToPort”或“disconnectFromPort”。

此外,在FirstGUI(具有main方法)中,我正在创建SecondGUI对象(并将setVisible设置为false)和使用FirstGUI和SecondGUI作为参数的Processor对象。

问题:

从FirstGUI中我想调用SecondGUI(通过setVisible为true) - 好的,完成了。但是从SecondGUI JFrame开始调用处理器对象的创建呢?调用SAME对象很重要,因为Processor方法可以在FirstGUI JFrame.JTextPane组件中设置文本,并将项添加到SecondGUI的JComboBox。

我不知道如何解决这个问题,我总是得到NullPointerException。

编辑: 我想补充一点,我在创建SecondGUI时不能将Processor对象作为参数传递,因为第二个GUI是先创建的,它是创建处理器时的参数......这就是问题。

2 个答案:

答案 0 :(得分:2)

构造第二个GUI(子)时,初始类(FirstGUI)可以在构造函数中传递self,并且还保留对构造对象的引用。现在两个GUI都有相互引用:

class F1 extends JFrame {
   F2 child;

   void createF2() {
     child = new F2(this);
     child.setVisible(true);
   }
}

class F2 extends JFrame {
   final F1 parent;    
   F2(F1 parent) { this.parent = parent; };
}

答案 1 :(得分:1)

如果您在本网站上搜索过您的问题或类似问题,您会发现最常见的建议不是使用多个JFrame,而是提示设计不当。最好使用CardLayout交换视图或使用适当模态的JDialogs。

至于你的问题,让一个类动态地将信息传递给另一个类,根据程序结构有两个主要选项。

  • 如果一个类在一个模态JDialog中,那么第一个类可以通过在第二个窗口不再可见后调用适当的getter方法从第二个模态类中提取信息。
  • 如果一个类以非模态方式显示,那么您将需要使用某种类型的侦听器(如PropertyChangeListener),以便在发生状态更改时通过观察到的类通知侦听类。

修改
关于:

  

从FirstGUI中我想调用SecondGUI(通过setVisible为true) - 好的,完成了。但是从SecondGUI JFrame开始调用处理器对象的创建呢?调用SAME对象很重要,因为Processor方法可以在FirstGUI JFrame.JTextPane组件中设置文本,并将项添加到SecondGUI的JComboBox。

Audrius为您提供了答案。他的回答是1+上升。

  

我不知道如何解决这个问题,我总是得到NullPointerException。

如果你得到一个NPE,应该仔细检查抛出NPE的行,看看哪个变量为null,然后在你的代码中追溯,看看为什么。如果您仍然停留在NPE上并需要我们的帮助,那么您将需要显示相关代码并向我们提供有关该问题的更多详细信息,包括注意哪个变量为null以及为什么您认为它不应为null。

  

编辑:我想补充说在创建SecondGUI时我无法将Processor对象作为参数传递,因为第二个GUI是先创建的,它是创建处理器时的参数......这就是问题。

这不是问题。由于依赖窗口是动态显示的,因此您始终可以在使用setter方法显示引用之前传递引用。