我为这个项目有5个类,Button Minefield GUI MenuBar Game。
Button是一个单独的地雷细胞。
Minefield包含一个2d的按钮数组,以及涉及所有按钮的操作。
GUI是MineField网格上方的部分,显示重置按钮、过期时间和保留多少标志,
Game将所有其他类放在面板中,并将它们放在applet中。这里没有游戏逻辑。
这是我的小程序截图
当涉及到使用继承时,我遇到了一些问题。如果我能解决这个问题,我也可以做其他的问题。它与调用超类中的方法有关。
我的问题之一:
当Button矿单元格被正确单击时,鼠标侦听器会将它捡起来,并将JButton的文本更改为"F“作为标志。但是,我想更新有多少标志可用的计数器,这是Minefield类中的一个变量。最后,我希望GUI类侦听对该变量的更改,并更新JLabel。
在MouseListener for 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实例,并且无法更新超类中的变量。我原以为它会更新雷区的现有对象,但我读到Java并不是通过引用传递的,所以我对如何做到这一点感到困惑。如果您需要看到更多的代码--请这样说--我试着不把这篇文章杂乱无章地写成5个类,然后说,“修复它”。
发布于 2016-02-18 21:01:28
您没有提供足够的代码,所以我只能在这里猜测。我认为您与关键词超级混淆了,它实际上意味着从继承的超类调用方法。我怀疑JButton是否继承了你们班雷区的任何东西。通常情况是相反的。
此外,字段的计数也存储在JLabel中并显示出来。因此,实际上,您必须调用具有这个JLabel的类的方法,并处理总数。
https://stackoverflow.com/questions/35462666
复制相似问题