2012-11-28 15 views
12

Mam jList w gui, gdzie mogę dodać dane za pomocą przycisku Dodaj. co chcę dodać kolejny przycisk o nazwie Wyczyść, który wyczyści wszystkie elementy. próbowałem to:Jak wyczyścić JList w Javie?

private void jButtonClearActionPerfomed(java.awt.event.ActionEvent evt) 
{ 
    DefaultListModel listmodel=new DefaultListModel(); 
    jList1 = new JList(listmodel); 
    if(evt.getSource()==jButtonClear) JList.setListData(new String[0]; 
    else listmodel.removeAllElements(); 
} 

Po kliknięciu na przycisk Dodaj ten doda elementy.

Po kliknięciu przycisku Wyczyść usuń elementy.

Ale kiedy ponownie kliknij przycisk Dodaj, nie ma nic w jList1

Odpowiedz

18

Nie powinieneś reinicjalizować całego widżetu JList tylko po to, aby usunąć z niego niektóre elementy. Zamiast tego należy manipulować modelem list, ponieważ zmiany w nim są "automatycznie" synchronizowane z powrotem do interfejsu użytkownika. Zakładając, że jesteś rzeczywiście użyciu DefaultListModel, jest to wystarczające, aby wdrożyć „Clear All” funkcjonalność:

private void jButtonClearActionPerfomed(java.awt.event.ActionEvent evt) { 
    if(evt.getSource()==jButtonClear) { 
     DefaultListModel listModel = (DefaultListModel) jList1.getModel(); 
     listModel.removeAllElements(); 
    } 
} 
7

Istnieje szereg problemów, pierwszy było to, że Twój przykład jest pełna kompilacja problemów, więc mam nadzieję, że nie jest to rzeczywisty kod .

JList nie ma statycznej metody o nazwie setListData. Myślę, że masz na myśli jList1 zamiast tego.

każdorazowym kliknięciu na czystym przycisku, tworzysz nowy model i składnik ...

private void jButtonClearActionPerfomed(java.awt.event.ActionEvent evt) 
{ 
    // ?? 
    DefaultListModel listmodel=new DefaultListModel(); 
    jList1 = new JList(listmodel); 
    // ?? 
    if(evt.getSource()==jButtonClear) jList1.setListData(new String[0]); 
    else listmodel.removeAllElements(); 
} 

Pomyślnie dereferencjonowane co kiedykolwiek jList1 wskazywał na, więc za każdym razem próby i interakcji dzięki temu nie wchodzisz już w interakcję ze składnikiem na ekranie.

Drugi problem jest dostarczenie pustej tablicy do metody setListData, która w zasadzie jest jak powiedzenie, „proszę dodać nic do mojej listy”

spróbować czegoś takiego;

+0

ok błędów copmile ze swojej modyfikacji, teraz po kliknięciu Wyczyść przycisk dodaje kilka nowych danych, z których nie wiem, pochodzi ... Ale próbuję tego i usuwa wszystkie dane, ale kiedy klikam przycisk Dodaj, dodaje nowe dane, ale zachowuje stare dane przed usunięciem: kod: DefaultListModel listmodel = (DefaultListModel) JList1.getModel(); evt.getSource() == jButtonClear {listmodel.removeAllElements(); – Pan24112012

+0

Zmieniłem warunki (tak, że teraz jasne wywołanie "removeAll") w przeciwnym razie doda nowy element. Ukradłem twój kod i nie starałem się go naprawić. Nie jestem pewien, czy jest to wspólny kod z innym zdarzeniem akcji, czy nie. Jeśli nie, usuń linię 'addElement' – MadProgrammer

+0

tak, to jest wspólny kod z przyciskiem Dodaj, nie mogę umieścić tutaj kodu, ponieważ jestem tutaj nowy, ale tutaj jest to, co jest na końcu kodu przycisku Dodaj: jList1.repaint(); \t jPanelVizualisationOptions1.update(); \t currentPanel.refresh(); – Pan24112012

1
DefaultListModel model=new DefaultListModel(); 
     model.clear(); 
    jList1.setModel(model); 

spróbować