我有5个该项目的课程,Button Minefield GUI MenuBar Game

Button是单个地雷单元。

Minefield包含二维数组的按钮以及与所有按钮有关的操作。

GUI是MineField网格上方的部分,显示重置按钮,经过的时间以及剩余的标志数,

Game将所有其他类放在面板中,并将它们放在applet中。这里没有游戏逻辑。

这是我的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个类都混乱而说“修复它”。

最佳答案

您没有提供足够的代码,所以我只能在这里猜测。
我认为您对key word super感到困惑
实际上,这意味着从您继承的超类中调用方法。
我怀疑JButton是否会从您的Minefield类继承任何东西。通常情况是相反的。

字段的计数也存储并显示在JLabel中。因此,实际上,您必须调用具有此JLabel并负责总计数的类的方法。

关于java - 扫雷Java继承,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35462666/

10-10 03:47