我有5个该项目的课程,Button
Minefield
GUI
MenuBar
Game
。Button
是单个地雷单元。Minefield
包含二维数组的按钮以及与所有按钮有关的操作。GUI
是MineField网格上方的部分,显示重置按钮,经过的时间以及剩余的标志数,Game
将所有其他类放在面板中,并将它们放在applet中。这里没有游戏逻辑。
这是我的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个类都混乱而说“修复它”。 最佳答案
您没有提供足够的代码,所以我只能在这里猜测。
我认为您对key word super感到困惑
实际上,这意味着从您继承的超类中调用方法。
我怀疑JButton是否会从您的Minefield类继承任何东西。通常情况是相反的。
字段的计数也存储并显示在JLabel中。因此,实际上,您必须调用具有此JLabel并负责总计数的类的方法。
关于java - 扫雷Java继承,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35462666/