Java 如何从一个JFrame中引用另一个JFrame中的变量?
我有一个带有按钮的JFrame,当我单击其中一个按钮时,一个整数会减少1。我试图在另一个JFrame中显示整数,但当我引用它时,我得到一个错误,即在静态上下文中不能引用非静态变量。如何使其成为非静态变量 以下是单击按钮时的代码Java 如何从一个JFrame中引用另一个JFrame中的变量?,java,swing,oop,static,jframe,Java,Swing,Oop,Static,Jframe,我有一个带有按钮的JFrame,当我单击其中一个按钮时,一个整数会减少1。我试图在另一个JFrame中显示整数,但当我引用它时,我得到一个错误,即在静态上下文中不能引用非静态变量。如何使其成为非静态变量 以下是单击按钮时的代码 private void DietPepsiBTNActionPerformed(java.awt.event.ActionEvent evt) { MessageLBL.s
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;
创建第三个对象并将引用传递给两个jframes。此共享对象可以存储您需要的任何属性,并在主框架中提供某种访问器(以允许其他组件读取值)(例如
getValue()
)
当值更改时,触发某种事件。您可以作弊并使用PropertyChange
事件,这将要求您不要添加任何额外的代码,或者您可以触发类似于更改事件的事件,通知另一个帧值已更改
然后,第二帧将使用getValue
方法读取该值
这将需要第二个帧具有对主帧的引用(以便它可以获得值)
更好的是,只需创建一个模型,允许该模型触发事件并共享该模型
查看更多详细信息布伦顿的答案很接近。理想情况下,按照他的建议,创建一个单独的对象并将其传递到每个帧。然后,帧共享对象。由于帧本身将具有对对象的引用,因此不需要任何类型的全局引用
YourModel model = new YourModel();
Frame1 frame1 = new Frame1(yourModel);
Frame2 frame2 = new Frame2(yourModel);
此外,您还实现了PropertyChangeListener习惯用法,每个框架都订阅了模型中的属性更改
这样,当Frame1对模型进行更改时,Frame2将收到更改通知,并且可以自动保持最新状态
然后,游戏就变成了一个将对象和它们的侦听器连接在一起的问题。在那之后,这一切是如何协同工作的,简直不可思议
Ref:您的错误表明您试图从静态上下文中使用对象及其属性。静态上下文不能引用对象。请发布完整的java代码。如果在JFrames之外创建静态变量不起作用,请向我们展示所有相关代码。您希望共享什么变量?代码的哪些部分是静态的?如何声明变量?请参见“请学习类、方法和属性名称的通用(特别是用于名称的大小写)”并一致使用它。