我有一个带按钮的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;
答案 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的引用。此共享对象可以存储您需要的任何属性