Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从一个JFrame中引用另一个JFrame中的变量?_Java_Swing_Oop_Static_Jframe - Fatal编程技术网

Java 如何从一个JFrame中引用另一个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

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

创建第三个对象并将引用传递给两个jframes。此共享对象可以存储您需要的任何属性,并在主框架中提供某种访问器(以允许其他组件读取值)(例如
getValue()

当值更改时,触发某种事件。您可以作弊并使用
PropertyChange
事件,这将要求您不要添加任何额外的代码,或者您可以触发类似于更改事件的事件,通知另一个帧值已更改

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

这将需要第二个帧具有对主帧的引用(以便它可以获得值)

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


查看更多详细信息

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

YourModel model = new YourModel();
Frame1 frame1 = new Frame1(yourModel);
Frame2 frame2 = new Frame2(yourModel);
此外,您还实现了PropertyChangeListener习惯用法,每个框架都订阅了模型中的属性更改

这样,当Frame1对模型进行更改时,Frame2将收到更改通知,并且可以自动保持最新状态

然后,游戏就变成了一个将对象和它们的侦听器连接在一起的问题。在那之后,这一切是如何协同工作的,简直不可思议


Ref:

您的错误表明您试图从静态上下文中使用对象及其属性。静态上下文不能引用对象。请发布完整的java代码。如果在JFrames之外创建静态变量不起作用,请向我们展示所有相关代码。您希望共享什么变量?代码的哪些部分是静态的?如何声明变量?请参见“请学习类、方法和属性名称的通用(特别是用于名称的大小写)”并一致使用它。