2013-01-06 41 views
0

我有一個帶有BorderLayout的窗口,JPanel包含放置在CENTER上的東西,大小爲800 * 250。我希望在點擊一個按鈕時,JPanel移動到NORTH,另一個JPanel移動到CENTER上。我試過這個,但它只是調整了我的窗戶而沒有做任何事情。動態更改Java中的BorderLayout

我試過這個,但它似乎沒有工作。

public void actionPerformed(ActionEvent e) { 
      frame.setPreferredSize(new Dimension(800,550)); 
      frame.removeAll(); 
      frame.add(northpanel, BorderLayout.NORTH); 
      frame.add(southpanel, BorderLayout.CENTER); 
      frame.getContentPane().repaint(); 
      frame.getContentPane().revalidate(); 
      frame.pack(); 
     } 

northpanel之前設置在CENTER上。

謝謝。 :)

+0

你可以嘗試重新繪製框架本身,而不是內容窗格上? – lekroif

+0

不起作用。 :( – Casteurr

+2

噢,我想我知道了,通常add方法被覆蓋,所以他們添加它們將組件添加到JFrame內容窗格,但removeAll方法不是,所以你必須在內容上調用removeAll() 。窗格 frame.getContentPane()的removeAll(); 試試這個 – lekroif

回答

3

add()和remove()方法被重寫,所以它們會在內容窗格中自動執行所有操作。請記住,JFrame只是一個容器,重要的是你的內容窗格。 removeAll()方法不會像那樣重寫。你應該做的是:

frame.getContentPane().removeAll(); 

你可以閱讀更多Oracle網站:)

Using Top-Level Containers