4

コンテナーは BorderLayout を使用します。CENTER に追加した JPanel があります。ただし、JPanel には変数名がありません。

私はcontents.remove(nameofPanel)を行うことができました

しかし、このように追加したので、 contents.add(new CustomJPanel(), BorderLayout.CENTER);

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

どうすればいいですか?

4

4 に答える 4

6

カールの答えはおそらく最良のものですが、何らかの理由で元の add() 呼び出しを変更できない場合は、あまり快適ではありません。

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

ただし、これを行う必要があると思われる場合は、一歩下がって、なぜそれをしようとしているのかを評価することをお勧めします.

于 2009-08-04T18:54:14.897 に答える
5

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

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

になる

nameOfPanel = new CustomJPanel();
contents.add(nameOfPanel, BorderLayout.CENTER);
于 2009-08-04T17:38:43.817 に答える
1

または、 getComponents()関数を使用してコンテナー内のすべての要素を一覧表示し、他の属性で Panel を検索することもできます (可能な場合)。

getName()属性はこの目的に役立ちます。たとえば、パネルを挿入する前に名前を設定し、その名前を検索キーとして使用できます。

于 2009-08-05T06:56:26.393 に答える
0

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

匿名オブジェクトは、参照する必要がない場合は問題ありません。しかし、あなたは行います。したがって、匿名の方法は使用しないでください。

于 2009-08-14T14:45:31.040 に答える