2009-08-04 18 views
4

容器使用BorderLayout。我有一個我添加到CENTER的JPanel。但是JPanel沒有變量名稱。如何從使用BorderLayout的JFrame中移除組件

我能做contents.remove(nameofPanel)

但自從我加入像這樣contents.add(新CustomJPanel(),BorderLayout.CENTER);

現在我試圖刪除當前的CustomJPanel並添加一個新的。

我該怎麼做?

回答

5

你最好的辦法是提取構造函數調用到名爲變量 - 可能是一個領域,實際上 - 然後降低到以前的情況。

contents.add(new CustomJPanel(), BorderLayout.CENTER); 

成爲

nameOfPanel = new CustomJPanel(); 
contents.add(nameOfPanel, BorderLayout.CENTER); 
6

雖然卡爾的回答可能是最好的一個,一個,愉快的更少的選擇,如果你因爲某些原因不能修改原始添加()調用:

contents.remove(((BorderLayout)getLayout()).getLayoutComponent(BorderLayout.CENTER)); 
contents.add(someNewPanel); 

雖然如果你認爲你需要這樣做,你可能想退後一步並評估你爲什麼要這樣做。

0

我強烈建議你聲明一個全局變量CustomJPanel,你的第一個面板實例化,然後添加面板。當你想刪除它時,你使用同一個對象。然後,將新對象分配給變量,並以相同的方式添加它。

當你不需要引用它們時,匿名對象是可以的。但你做了。所以你應該避免使用匿名方式。