2016-02-17 90 views
2

我對這個項目有5個班,ButtonMinefieldGUIMenuBarGame掃雷Java繼承

Button是一個單獨的礦井單元。

Minefield包含一個二維數組按鈕,以及涉及所有按鈕的操作。

GUI是雷區格上方的部分,顯示覆位按鈕,時間已過了多少標誌依然存在,

Game將所有其他類別的面板,並將其放置在小程序。這裏沒有遊戲邏輯。

這裏是我的applet

我有問題的截圖,當涉及到使用繼承。如果我能解決這個問題,我也可以解決其他問題。它與調用超類中的方法有關。

我的一個問題:

Button礦細胞是右鍵點擊,鼠標監聽拾起,改變了JButton以「F」爲標誌的文本。但是,我想更新有多少標誌可用的計數器,這是Minefield類中的變量。最後,我想讓GUI類監聽對該變量的更改並更新JLabel

MouseListenerButton

if (e.getButton() == MouseEvent.BUTTON3) 
     { 
      advanceCurrentState();  

      if (currentState == "FLAG") 
      super.setNumFlagsRemaining(-1); //update the Minefields variable 
     } 

回到Minefield

public void setNumFlagsRemaining(int delta) 
    { 
     numFlagsRemaining += delta; 
    } 

但是,這是行不通的。當我正在調試時,super.setNumFlagsRemaining(-1)正在創建一個新實例Minefield,我無法更新超類中的變量。我認爲它會更新Minefield的現有對象,但我讀到Java並沒有通過引用傳遞,所以我很困惑如何去做。如果你需要看到額外的代碼,請這麼說,我試着不要把這篇文章弄亂了5班,並說「修復它」。

+0

這可能有助於:http://stackoverflow.com/questions/22348685/jbutton-with-both-actionlistener-mouselistener –

+2

調用'super.setNumFlagsRemaining(-1)'不會創建一個新的雷區實例,它正在更新當前的一個。任何在類中使用_super_這個詞都是指同一個實例,但是它是父類型。 –

+0

我是否正確理解'Button'是否延伸'Minefield',但同時'Minefield'包含'Button'二維數組? – radoh

回答

1

您沒有提供足夠的代碼,因此我只能在此猜測。 我覺得你很困惑key word super 它實際上意味着從你繼承的超類中調用方法。 我懷疑JButton是否繼承了Minefield類。通常情況相反。

也計數字段被存儲和顯示在JLabel中。所以你實際上必須調用具有這個JLabel的類的方法並且處理總數。