我有一个Maze类(扩展JPanel)。我想创建一个“新”按钮,用新变量替换这个类的变量。
btnNewMaze.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
maze.repaint();
maze = new Maze((int) xSpinner.getValue(), (int) ySpinner.getValue());
maze.repaint();
}
});
其他按钮正常工作。 但是这不能正常工作 - 不重复,方法是例外,等等。 我该如何解决这个问题或用其他代码替换?
答案 0 :(得分:2)
不知怎的,我想你想要的是,当按下按钮时,已经添加到可见容器(例如JPanel)的迷宫对象将被替换为新的Maze实例。
如果是这种情况,并且此“迷宫”对象已经添加到容器(例如JPanel),那么,当您执行您提供的代码时,即: maze = new迷宫(...) ,您的旧迷宫对象将保持添加到容器中并且不会受到影响。容器仍将保留旧迷宫对象的内部引用。
事实上,当执行代码 maze = new Maze(...) 时,会发生的事情不是以前的迷宫对象替换。实际上,您的参考变量 迷宫 指向新的Maze()对象,而旧实例仍然附加到容器。
如果您想要的是替换已添加到容器中的旧迷宫对象,则应将其从容器中删除并添加新容器。
这可能并非如此,但鉴于所提供的信息,我能够理解这一点。请给我们更多详细信息(整个类或方法,抛出的异常,您正在尝试做什么,等等)。
答案 1 :(得分:1)
我甚至在您提供的代码中看不到JButton
。如果你想要一个按钮,你需要构建它(就像你对任何其他对象一样),并且可能将它添加到适当的容器中。
答案 2 :(得分:1)
假设您的maze
实例已添加到面板中,您必须先将其从面板中删除,然后再将其替换为新实例:
this.remove(maze);
maze = new Maze(....);
this.add(maze, ...);