我對這個項目有5個班,Button
Minefield
GUI
MenuBar
Game
。掃雷Java繼承
Button
是一個單獨的礦井單元。
Minefield
包含一個二維數組按鈕,以及涉及所有按鈕的操作。
GUI
是雷區格上方的部分,顯示覆位按鈕,時間已過了多少標誌依然存在,
Game
將所有其他類別的面板,並將其放置在小程序。這裏沒有遊戲邏輯。
這裏是我的applet
我有問題的截圖,當涉及到使用繼承。如果我能解決這個問題,我也可以解決其他問題。它與調用超類中的方法有關。
我的一個問題:
當Button
礦細胞是右鍵點擊,鼠標監聽拾起,改變了JButton
以「F」爲標誌的文本。但是,我想更新有多少標誌可用的計數器,這是Minefield
類中的變量。最後,我想讓GUI
類監聽對該變量的更改並更新JLabel
。
在MouseListener
爲Button
:
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班,並說「修復它」。
這可能有助於:http://stackoverflow.com/questions/22348685/jbutton-with-both-actionlistener-mouselistener –
調用'super.setNumFlagsRemaining(-1)'不會創建一個新的雷區實例,它正在更新當前的一個。任何在類中使用_super_這個詞都是指同一個實例,但是它是父類型。 –
我是否正確理解'Button'是否延伸'Minefield',但同時'Minefield'包含'Button'二維數組? – radoh