0

我有一个类迷宫(扩展 JPanel)。我想做一个“新”按钮,用新变量替换这个类的一个变量。

    btnNewMaze.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            maze.repaint();
            maze = new Maze((int) xSpinner.getValue(), (int) ySpinner.getValue());  
            maze.repaint();
        }
    });

其他按钮工作正常。但这不能正常工作 - 不会重新绘制,方法会引发异常等。我该如何解决这个问题或用另一个代码替换?

4

3 回答 3

2

不知何故,我认为您想要的是当按下按钮时,已经添加到可见容器(例如 JPanel)的迷宫对象被替换为 Maze 的新实例。

如果是这种情况,并且如果这个“迷宫”对象已经添加到容器(例如 JPanel)中,那么,当您执行您提供的代码时,即:maze = new Maze(...),您的旧迷宫对象将保持添加到容器中并且不受影响。该容器仍将保存对旧迷宫对象的内部引用。

事实上,当代码 maze = new Maze(...)被执行时,发生的并不是之前的迷宫对象替换。实际上,发生的情况是您的引用变量maze指向新的 Maze() 对象,而旧实例仍然附加到容器。

如果您想要替换已添加到容器中的旧迷宫对象,则应将其从容器中移除并添加新对象。

这一切可能并非如此,但鉴于提供的信息,这是我能够理解的。请给我们更多的细节(整个类或方法、抛出的异常、你到底想要做什么,等等)。

于 2012-05-17T16:33:21.860 回答
1

我什至没有JButton在您提供的代码中看到 a 。如果你想要一个按钮,你需要构造它(就像你做任何其他对象一样),并且可能将它添加到适当的容器中。

于 2012-05-17T16:20:55.253 回答
1

假设您的maze实例已添加到面板中,您必须先将其从面板中删除,然后再将其替换为新实例:

this.remove(maze);
maze = new Maze(....);
this.add(maze, ...);
于 2012-05-17T16:35:43.570 回答