2011-08-19 5 views
7

Dodaję i usuwam komponenty dynamicznie w postaci JPanel. Dodawanie i usuwanie funkcji działa dobrze, ale po usunięciu komponentu usuwa on ostatni składnik, a nie komponent do usunięcia.Dynamicznie usuń komponent z JPanel

Jak mogę rozwiązać ten problem?

+3

proszę pisać kod tak możemy pomóc. –

+6

Aby uzyskać lepszą pomoc wcześniej, dołącz [SSCCE] (http://www.sscce.org) – mre

+3

Czy używasz metody "public void remove (int index)" zamiast "public void remove (Component comp)"? Opublikuj SSCCE, jeśli chcesz uzyskać lepszą odpowiedź. –

Odpowiedz

6

Za pomocą metody Container.remove(Component) można usunąć dowolny składnik z pojemnika. Na przykład:

JPanel j = new JPanel(); 

JButton btn1 = new JButton(); 

JButton btn2 = new JButton(); 

j.add(btn1); 

j.add(btn2); 

j.remove(btn1); 
3

Co ciekawe idę po drugiej stronie tej samej kwestii i jestem zaskoczony, ludzie są upvoting drugą odpowiedź, jak jest on wyraźnie prosząc o dynamicznie stworzony składniki, a nie komponenty już utworzone pod nazwą zmiennej który jest dostępny, zamiast anonimowo tworzonych obiektów.

Odpowiedź jest dość prosta. Użyj polecenia getComponents() do iterowania przez tablicę komponentów dodanych do JPanel. Znajdź rodzaj komponentu, który chcesz usunąć, na przykład za pomocą instanceof. W moim przykładzie usunę wszystkie JCheckBoxes dodane do mojego JPanel.

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

Komponent jest od 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();