2011-08-19 34 views
7

JPanelでコンポーネントを動的に追加および削除しています。 機能の追加と削除は正常に機能しますが、コンポーネントを削除すると、削除するコンポーネントではなく最後のコンポーネントが削除されます。JPanelからコンポーネントを動的に削除

どうすればこの問題を解決できますか?

+3

からです。 –

+6

[SSCCE](http://www.sscce.org) – mre

+3

「public void remove(Component comp)」の代わりに「public void remove(int index)」メソッドを使用していますか?より良い答えが必要な場合は、SSCCEを投稿してください。 –

答えて

6

Container.remove(Component)メソッドを使用すると、コンテナからコンポーネントを削除できます。たとえば:

JPanel j = new JPanel(); 

JButton btn1 = new JButton(); 

JButton btn2 = new JButton(); 

j.add(btn1); 

j.add(btn2); 

j.remove(btn1); 
3

は、興味深いことに、私は同じ問題に出くわすていますし、彼ははっきり程度動的作成したコンポーネントではなく、すでに変数名の下に作成されたコンポーネントを求めているように私は、人々が他の答えをupvotingしている驚いています匿名で作成されたオブジェクトではなく、取得可能なオブジェクトです。

答えはかなりシンプルです。 getComponents()を使用して、JPanelに追加されたコンポーネントの配列を反復処理します。たとえば、instanceofを使用して、削除するコンポーネントの種類を探します。私の例では、JPanelに追加されたJCheckBoxを削除します。

Make sure to revalidate and repaint your panel, otherwise changes will not appear

コンポーネントは、私たちが助けることができるので、あなたのコードを投稿してくださいjava.awt.Component.

//Get the components in the panel 
Component[] componentList = panelName.getComponents(); 

//Loop through the components 
for(Component c : componentList){ 

    //Find the components you want to remove 
    if(c instanceof JCheckBox){ 

     //Remove it 
     clientPanel.remove(c); 
    } 
} 

//IMPORTANT 
panelName.revalidate(); 
panelName.repaint(); 
関連する問題