コンテナーは BorderLayout を使用します。CENTER に追加した JPanel があります。ただし、JPanel には変数名がありません。
私はcontents.remove(nameofPanel)を行うことができました
しかし、このように追加したので、 contents.add(new CustomJPanel(), BorderLayout.CENTER);
今、現在の CustomJPanel を削除して新しいものを追加しようとしています。
どうすればいいですか?
カールの答えはおそらく最良のものですが、何らかの理由で元の add() 呼び出しを変更できない場合は、あまり快適ではありません。
contents.remove(((BorderLayout)getLayout()).getLayoutComponent(BorderLayout.CENTER));
contents.add(someNewPanel);
ただし、これを行う必要があると思われる場合は、一歩下がって、なぜそれをしようとしているのかを評価することをお勧めします.
あなたの最善の方法は、コンストラクター呼び出しを名前付き変数 (実際にはおそらくフィールド) に抽出し、前のケースに縮小することです。
contents.add(new CustomJPanel(), BorderLayout.CENTER);
になる
nameOfPanel = new CustomJPanel();
contents.add(nameOfPanel, BorderLayout.CENTER);
または、 getComponents()関数を使用してコンテナー内のすべての要素を一覧表示し、他の属性で Panel を検索することもできます (可能な場合)。
getName()属性はこの目的に役立ちます。たとえば、パネルを挿入する前に名前を設定し、その名前を検索キーとして使用できます。
グローバルな CustomJPanel 変数を宣言し、それを最初のパネルでインスタンス化してから、パネルを追加することを強くお勧めします。削除する場合は、同じオブジェクトを使用します。次に、新しいオブジェクトを変数に割り当て、同じ方法で追加します。
匿名オブジェクトは、参照する必要がない場合は問題ありません。しかし、あなたは行います。したがって、匿名の方法は使用しないでください。