繁体   English   中英

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

[英]How can I reference a variable in one JFrame from another 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;

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM