我有一堂迷宫课(扩展了JPanel)。我要创建一个“新”按钮,用新变量替换此类的变量。

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


其他按钮正常。
但这不能正常工作-不会重新绘制,方法阻止异常等。
如何解决此问题或替换为其他代码?

最佳答案

我以某种方式认为,您想要的是当按钮被按下时,已经添加到可见容器(例如,JPanel)中的迷宫对象代替了迷宫的新实例。

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

实际上,当执行代码maze = new Maze(...)时,发生的不是以前的迷宫对象替换。实际上,发生的情况是您的参考变量maze指向了新的Maze()对象,而旧的实例仍附加在容器上。

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

并非所有情况都如此,但是鉴于所提供的信息,这就是我能够理解的。请给我们提供更多详细信息(整个类或方法,抛出的异常,您到底想做什么,等等)。

关于java - 如何用另一个替换一个JPanel?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10639520/

10-10 09:40