如何将一个JPanel替换为另一个?

时间:2012-05-17 16:18:42

标签: java swing jframe

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

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

其他按钮正常工作。 但是这不能正常工作 - 不重复,方法是例外,等等。 我该如何解决这个问题或用其他代码替换?

3 个答案:

答案 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, ...);