2012-11-28 28 views
12

Ich habe eine jList in gui, wo ich einige Daten mit Hinzufügen hinzufügen kann. was ich hinzufügen möchte eine andere Schaltfläche namens Clear, die alle Elemente löscht. Ich habe versucht, dies:Wie lösche ich eine JList in Java?

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(); 
} 

Wenn ich auf Schaltfläche Hinzufügen klicken diese Elemente hinzufügen.

Wenn ich auf Löschen klicke, entferne Elemente.

Aber wenn ich erneut klicken Sie auf Hinzufügen, gibt es nichts in der jList1

Antwort

18

Sie sollten das gesamte JList-Widget nicht reinitialisieren, nur um einige Elemente daraus zu entfernen. Stattdessen sollten Sie das Listenmodell manipulieren, da Änderungen daran automatisch mit der Benutzeroberfläche synchronisiert werden. Unter der Annahme, dass Sie in der Tat sind die DefaultListModel verwenden, das ausreichend ist, Ihre ‚Clear All‘ Funktionalität zu implementieren:

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

Es gibt eine Reihe von Problemen, die erste gewesen, dass Ihr Beispiel Probleme kompilieren voll ist, so dass ich hoffe, das ist nicht Ihre eigentliche Code .

JList hat keine statische Methode namens setListData. Ich denke du meinst jList1 stattdessen.

Jedes Mal, wenn Sie auf der sauberen Schaltfläche klicken, werden Sie ein neues Modell und Komponente ... und

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(); 
} 

Sie haben dereferenced erfolgreich, was auch immer jList1 bei deutete, so dass jede Zeit, die Sie versuchen und zu interagieren damit interagieren Sie nicht mehr mit der Komponente auf dem Bildschirm.

Das andere Problem ist, dass Sie ein leeres Array an die setListData Verfahren liefert, die im Grunde wie zu sagen ist,

Versuchen Sie so etwas wie dieses „bitte nichts zu meiner Liste hinzufügen“;

+0

ok für die copmile Fehler mit Ihrer Änderung, jetzt, wenn ich Sie auf den Clear button es fügt einige neue Daten hinzu, von denen ich nicht weiß, dass sie herkommen ... Aber ich versuche das und es löscht alle Daten, aber wenn ich auf Hinzufügen klicke fügt es neue Daten ein aber es behält die alten Daten vor dem Löschen: code: DefaultListModel listmodel = (DefaultListModel) JList1.getModel(); evt.getSource() == jButtonClear {listmodel.removeAllElements(); – Pan24112012

+0

Ich habe die Bedingungen gewechselt (so dass clear jetzt 'removeAll' aufruft) ansonsten wird ein neues Element hinzugefügt. Ich habe deinen Code gestohlen und war nicht vorsichtig damit, ihn zu reparieren. Ich bin mir nicht sicher, ob das Code mit einem anderen Aktionsereignis geteilt wird oder nicht. Wenn nicht, entferne die 'addElement'-Zeile – MadProgrammer

+0

Ja, es ist ein gemeinsamer Code mit der Schaltfläche Hinzufügen, ich kann den Code hier nicht einfügen, weil ich neu hier bin, aber hier ist, was am Ende des Codes der Schaltfläche Hinzufügen ist: jList1.repaint(); \t jPanelVizualisationOptions1.update(); \t currentPanel.refresh(); – Pan24112012

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

versuchen diese