容器使用BorderLayout。我有一個我添加到CENTER的JPanel。但是JPanel沒有變量名稱。如何從使用BorderLayout的JFrame中移除組件
我能做contents.remove(nameofPanel)
但自從我加入像這樣contents.add(新CustomJPanel(),BorderLayout.CENTER);
現在我試圖刪除當前的CustomJPanel並添加一個新的。
我該怎麼做?
容器使用BorderLayout。我有一個我添加到CENTER的JPanel。但是JPanel沒有變量名稱。如何從使用BorderLayout的JFrame中移除組件
我能做contents.remove(nameofPanel)
但自從我加入像這樣contents.add(新CustomJPanel(),BorderLayout.CENTER);
現在我試圖刪除當前的CustomJPanel並添加一個新的。
我該怎麼做?
你最好的辦法是提取構造函數調用到名爲變量 - 可能是一個領域,實際上 - 然後降低到以前的情況。
contents.add(new CustomJPanel(), BorderLayout.CENTER);
成爲
nameOfPanel = new CustomJPanel();
contents.add(nameOfPanel, BorderLayout.CENTER);
雖然卡爾的回答可能是最好的一個,一個,愉快的更少的選擇,如果你因爲某些原因不能修改原始添加()調用:
contents.remove(((BorderLayout)getLayout()).getLayoutComponent(BorderLayout.CENTER));
contents.add(someNewPanel);
雖然如果你認爲你需要這樣做,你可能想退後一步並評估你爲什麼要這樣做。
或者你可以列出與http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Container.html#getComponents()功能的容器中的所有元素,並通過其他屬性搜索您的面板(如果可以的話)。
的http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Component.html#getName()屬性是用於此目的的有用的,例如您可以在插入前爲面板設置一個名稱,並且可以使用該名稱作爲搜索關鍵字。
我強烈建議你聲明一個全局變量CustomJPanel,你的第一個面板實例化,然後添加面板。當你想刪除它時,你使用同一個對象。然後,將新對象分配給變量,並以相同的方式添加它。
當你不需要引用它們時,匿名對象是可以的。但你做了。所以你應該避免使用匿名方式。