2013-05-03 124 views
0

我有一個帶按鈕的JFrame,當我點擊其中一個按鈕時,整數減1。我試圖在另一個JFrame中顯示整數,但是當我引用它時,我得到一個錯誤,說非靜態變量不能被引用靜態上下文。我怎樣才能使這個非靜態變量?如何從另一個JFrame引用一個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

您的錯誤表明您正試圖從靜態上下文中使用Object及其屬性。靜態上下文不能引用對象。請發佈完整的java代碼。 – 2013-05-03 03:36:23

+0

如果您在JFrame之外創建靜態變量不起作用? – felipe 2013-05-03 03:48:32

+0

向我們顯示完整的相關代碼。你想分享什麼變量?你的代碼的哪些部分是靜態的?你如何聲明變量? – ApproachingDarknessFish 2013-05-03 04:12:45

回答

0

創建第三個對象並將引用傳遞給兩個jframe。此共享對象可以存儲任何您需要的屬性

1

在主框架中提供某種訪問器(以允許其他組件讀取值)(例如getValue())。

當價值改變時,引發某種事件。您可以作弊並使用事件,這會要求您不要添加任何其他代碼,或者可以引發類似更改事件的通知其他框架的值已更改的事件。

第二幀然後將使用getValue方法來讀取值。

這將需要第二幀有一個引用到主(所以它可以得到的價值)。

更好的是,只需創建一個模型,讓模型觸發事件並共享模型。

看一看Observer Pattern更多細節

1

布蘭頓的答案是接近。理想情況下,你按照他的建議做了什麼,創建一個單獨的對象並將其傳遞給每個框架。然後框架共享對象。由於框架本身將引用該對象,因此不需要任何種類的全局引用。

YourModel model = new YourModel(); 
Frame1 frame1 = new Frame1(yourModel); 
Frame2 frame2 = new Frame2(yourModel); 

此外,您都實現了PropertyChangeListener成語其中每一幀贊同在YourModel屬性的變化。

這樣,當Frame1對YourModel進行更改時,Frame2將被通知它們並且可以自動保持自己最新。

然後遊戲成爲物體和他們的聽衆一起佈線的事情。之後,這幾乎是神奇的,它是如何一起工作的。

Ref:http://docs.oracle.com/javase/tutorial/uiswing/events/propertychangelistener.html

相關問題