0

我有一个带按钮的 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;
4

3 回答 3

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

于 2013-05-03T03:47:28.827 回答
1

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

当值改变时,触发某种事件。您可以作弊并使用一个PropertyChange不需要添加任何额外代码的事件,或者您可以触发类似于更改事件的事件,通知其他框架该值已更改。

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

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

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

查看观察者模式了解更多详情

于 2013-05-03T03:40:33.777 回答
0

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

于 2013-05-03T03:36:12.153 回答