2009-08-04 5 views
4

コンテナはBorderLayoutを使用します。私はCENTERに追加したJPanelを持っています。しかし、JPanelには変数名がありません。BorderLayoutを使用するJFrameからコンポーネントを削除するには

私はこのcontents.add(新しいCustomJPanel()、BorderLayout.CENTER)のようにこれを追加しましたので、私はcontents.remove(nameofPanel)

を行うことができしかし、

現在、私は現在のCustomJPanelを削除して新しいものを追加しようとしています。

どうすればよいですか?

答えて

5

あなたの最善の方法は、コンストラクタ呼び出しを名前付き変数(実際にはおそらくフィールド)に抽出して、前のケースに減らすことです。

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

カールの答えは、おそらく最高の1ですが、あなたは、元のアドオン()呼び出し変更することはできません何らかの理由であれば、あまり楽しい代替

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

次のようになります。

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

あなたがこれを行う必要があると思われる場合は、元に戻ってそれをやろうとしている理由を評価したいかもしれません。

0

または、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()属性は、この目的に役立ちます。挿入する前にパネルの名前を設定し、その名前を検索キーとして使用することができます。

0

グローバルCustomJPanel変数を宣言し、最初のパネルでインスタンス化してからパネルを追加することを強くお勧めします。それを削除する場合は、同じオブジェクトを使用します。次に、新しいオブジェクトを変数に割り当て、同じ方法で追加します。

匿名オブジェクトは、参照する必要がない場合は大丈夫です。しかし、あなたは行います。だから匿名の方法を使わないでください。

関連する問題