如何从另一个JFrame引用一个JFrame中的变量?

时间:2013-05-03 03:31:38

标签: java swing oop static jframe

我有一个带按钮的JFrame,当我点击其中一个按钮时,整数减少1.我试图在另一个JFrame中显示整数但是当我引用它时,我得到一个错误,说非静态变量不能被引用静态上下文。如何将其设为非静态变量?

以下是点击按钮时的代码。

private void DietPepsiBTNActionPerformed(java.awt.event.ActionEvent evt) {                                             
    MessageLBL.setText("Enjoy your Diet Pepsi!");
    credit -= 1.00;
    stCredit = Double.toString(credit);
    CreditAMT.setText("$" + stCredit);
    Refresh();
    dietPepsi -= 1;

3 个答案:

答案 0 :(得分:1)

在主框架中提供某种访问器(允许其他组件读取值)(例如getValue())。

当值改变时,触发某种事件。您可以欺骗并使用PropertyChange事件,这将要求您不要添加任何其他代码,或者您可以触发类似更改事件的事件,通知另一帧该值已更改。

然后第二帧将使用getValue方法读取值。

这将要求第二帧具有对主控的引用(因此它可以获取值)。

更好的是,只需创建一个模型,允许模型触发事件并共享模型。

有关详细信息,请查看Observer Pattern

答案 1 :(得分:1)

布兰登的答案很接近。理想情况下,按照他的建议做什么,创建一个单独的对象并将其传递给每个框架。然后帧共享对象。由于框架本身将具有对象的引用,因此您不需要任何类型的全局引用。

YourModel model = new YourModel();
Frame1 frame1 = new Frame1(yourModel);
Frame2 frame2 = new Frame2(yourModel);

此外,您还可以将PropertyChangeListener惯用法实现为每个框架在YourModel中订阅属性更改的位置。

这样,当Frame1对YourModel进行更改时,Frame2会收到通知,并可以自动更新。

然后,游戏变成了将物体和听众连接在一起的事物。在那之后,它们如何一起工作几乎是神奇的。

参考:http://docs.oracle.com/javase/tutorial/uiswing/events/propertychangelistener.html

答案 2 :(得分:0)

制作第三个对象并传递对两个jframe的引用。此共享对象可以存储您需要的任何属性