我有一个迷宫类(扩展 JPanel)。我想制作一个"new"按钮,用新变量替换此类的变量。
btnNewMaze.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
maze.repaint();
maze = new Maze((int) xSpinner.getValue(), (int) ySpinner.getValue());
maze.repaint();
}
});
其他按钮工作正常。 但这不能正常工作——不能重绘,方法会抛出异常,等等。 我该如何解决这个问题或用其他代码替换?
最佳答案
不知何故,我认为您想要的是在按下按钮时将已添加到可见容器(例如 JPanel)的迷宫对象替换为 Maze 的新实例。
如果是这种情况,并且此“迷宫”对象已添加到容器(例如 JPanel)中,那么当您执行您提供的代码时,即: maze = new迷宫(...),您的旧迷宫对象将保留添加到容器中并且不受影响。该容器仍将保留对旧迷宫对象的内部引用。
事实上,当代码 maze = new Maze(...) 执行时,发生的并不是之前的迷宫对象替换。实际上,发生的情况是您的引用变量 maze 指向新的 Maze() 对象,而旧实例仍然附加到容器。
如果您想要替换已添加到容器中的旧迷宫对象,那么您应该将其从容器中删除并添加新的。
情况可能并非如此,但这就是我根据所提供的信息所能理解的。请向我们提供更多详细信息(整个类或方法、引发的异常、您到底想要做什么,等等)。
关于java - 如何将一个 JPanel 替换为另一个 JPanel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10639520/