2012-05-17 55 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, ...); 
相關問題