2012-05-17 56 views
0

我有一个班级迷宫(扩展JPanel)。我想创建一个“新”按钮,用新变量替换这个类的变量。如何用另一个替换一个JPanel?

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

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

+0

你在哪里调用从代码?它在迷宫课内吗?另外,你有什么例外? – Tharwen

+0

究竟是抛出的异常? –

+0

我从另一个班级调用代码(主)。 ArrayIndexOutOfBoundsException,但它与Maze类的方法连接。 – DarkSun

回答

2

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

如果是这样,如果这“迷宫”对象已经添加到容器(一个JPanel,例如),然后,当执行时所提供的代码,即,壳体和:迷宫=新迷宫(。 ..),您的旧迷宫对象将保持添加到容器并保持不受影响。容器仍然拥有旧迷宫对象的内部参照。

事实上,当代码迷宫=执行新的迷宫(...),什么情况是不是前迷宫对象替换。实际上,会发生什么是您的参考变量迷宫被指向新的迷宫()对象,而旧的实例仍然附着到容器。

如果你想要的是一个旧的迷宫对象已经添加到一个容器的替代,那么你应该从容器中删除它,并添加一个新的。

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

+0

谢谢,这是一个问题。 – DarkSun

1

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

1

假设你maze实例添加到面板上,你必须用一个新的实例替换它之前从面板中删除:

this.remove(maze); 
maze = new Maze(....); 
this.add(maze, ...); 
相关问题