Ich habe ein JTextField und eine JList in meinem Programm. Die JList enthält die Kontakte des Benutzers. Ich möchte die JList basierend auf dem Text auf dem JTextField filtern. Zum Beispiel, wenn ich "Mike" eintippe, werden nur Kontakte angezeigt, die "Mike" enthalten. Wenn der Benutzer das JTextField löscht, wird der Filter zurückgesetzt.
Ich weiß, dass ich das manuell tun könnte, indem ich zwei Arrays habe. Eine für die ursprünglichen Kontakte und eine für die gefilterten. Wenn der Benutzer den Wert von JTextField ändert, würde ich durch die ursprüngliche Liste gehen, die temporäre Liste aktualisieren und die JList aktualisieren. Ich frage mich nur, ob es ein eingebautes Feature gibt, um manuelle Arbeit zu vermeiden.
Der beste Weg, um solche Dinge zu tun, ist eine ListModel-Implementierung, die ihren Inhalt filtert. Ich kenne keine ListModel-Standardfilterung, aber das sollte nicht zu schwer sein. Hier ist eine schnelle und schmutzige Lösung, nur um Ihnen eine Idee zu geben. Vielleicht möchten Sie mehr Schnickschnack hinzufügen.
%Vor%Um es zu verwenden, müssen Sie es auf Ihre JList setzen und dann setFilter () aufrufen, wie Sie brauchen. Hier ist ein Beispiel:
%Vor%Sobald die Methode setFilter () aufgerufen wurde, wird erwartet, dass Ihre JList auf dem Bildschirm ihren Inhalt entsprechend ändert.
Alternativ können Sie ein beobachtbares / beobachtbares Muster für Ihren Filter implementieren, sodass Sie die Liste ohne Aufruf der Methode setFilter () erneut filtern können. Sie können später damit experimentieren. Für die erste Iteration ist es gut genug, solange Sie die Methode setFilter jedes Mal aufrufen, wenn ein Benutzer etwas in Ihr JTextField eingibt.
Eine einfachere Lösung könnte die Verwendung von JTable
sein, die eine integrierte Fähigkeit zum Filtern und Sortieren ( RowSorter
) besitzt. Eine einspaltige Tabelle unterscheidet sich nicht zu sehr von einer Liste.
Wenn Sie mit externen Bibliotheken einverstanden sind, würde ich Jides QuickListFilterField / QuickTreeFilterField empfehlen. Mit wenigen Zeilen Code, könnten Sie eine visuell filterbare JList / JTree, Groß-und Kleinschreibung suchen, Wildcard / Regex-Abgleich usw. ... Erstaunlich einfach zu bedienen!
Tags und Links java swing filter jlist jtextfield