Liste filtern...

izoards

Bekanntes Mitglied
Hallo,

Ich möchte eine einfache Liste (ListView<String>) über ein Textfeld filtern können.
Ich habe dazu folgendes gefunden:
https://code.makery.ch/blog/javafx-8-tableview-sorting-filtering/

Und möchte dies nun an meine Gegebenheiten anpassen.
Leider klappt es mit der gefilterten Anzeige nicht. Ich glaube das Problem liegt daran, dass ich die SortedList nicht mit der ListView "verbinden" kann.

Anbei Mein Versuch:

Java:
public void initialize() {
        // 1. Wrap the ObservableList in a FilteredList (initially display all data).
        FilteredList<String> filteredData = new FilteredList<>(items, p -> true);

        // 2. Set the filter Predicate whenever the filter changes.
        filterField.textProperty().addListener((observable, oldValue, newValue) -> {

            filteredData.setPredicate(items -> {
                // If filter text is empty, display all persons.
                if (newValue == null || newValue.isEmpty()) {
                    return true;
                }

                // Compare first name and last name of every person with filter text.
                String lowerCaseFilter = newValue.toLowerCase();

                if (items.toLowerCase().indexOf(lowerCaseFilter) != -1) {
                    System.out.println("gefunden!");
                    return true; // Filter matches first name.
                }
                return false; // Does not match.
            });
        });
        System.out.println("next");
        // 3. Wrap the FilteredList in a SortedList.
        SortedList<String> sortedData = new SortedList<>(filteredData);

        // 4. Bind the SortedList comparator to the TableView comparator.
        //       Otherwise, sorting the TableView would have no effect.
        sortedData.comparatorProperty().bind(list.sorted().comparatorProperty());

        // 5. Add sorted (and filtered) data to the table.
        list.setItems(sortedData);

    }

Denn in Zeile 30 gibt es ein Problem, also der Befehl gibt es so gar nicht....

Die Liste "list" ist eine observableList<String>

Java:
private ObservableList<String> items = FXCollections.observableArrayList();

@FXML
private ListView<String> list;

Im Beispiel wird die filteredList ja an eine TableView gebunden.
Wie kann ich dies an meine ListView binden?

Oder mache ich sonst wo einen Fehler?

Ich hoffe diese Angaben genügen, um den Fehler einzugrenzen...

Besten Dank schon im Voraus für eure Hilfe :)
 

izoards

Bekanntes Mitglied
Wenn ich den Code so anpasse, dass die Liste jeweils nach dem Filtern direkt neu geschrieben wird, dann funktioniert's

Java:
public void initialize() {
        // 1. Wrap the ObservableList in a FilteredList (initially display all data).
        FilteredList<String> filteredData = new FilteredList<>(items, p -> true);

        // 2. Set the filter Predicate whenever the filter changes.
        filterField.textProperty().addListener((observable, oldValue, newValue) -> {

            filteredData.setPredicate(items -> {
                // If filter text is empty, display all persons.
                if (newValue == null || newValue.isEmpty()) {
                    return true;
                }

                // Compare first name and last name of every person with filter text.
                String lowerCaseFilter = newValue.toLowerCase();

                if (items.toLowerCase().indexOf(lowerCaseFilter) != -1) {
                    System.out.println("gefunden!" + items);
                    return true; // Filter matches first name.
                }
                return false; // Does not match.
            });
            SortedList<String> sortedData = new SortedList<>(filteredData);
            list.setItems(sortedData);
        });
        System.out.println("next");
        // 3. Wrap the FilteredList in a SortedList.


        // 4. Bind the SortedList comparator to the TableView comparator.
        //       Otherwise, sorting the TableView would have no effect.
      //  sortedData.comparatorProperty().bind(items.sorted().comparatorProperty());

        // 5. Add sorted (and filtered) data to the table.

    }

Seht Ihr hier Probleme? Ist vermutlich nicht der effektivste Weg, aber ich lade die Liste sowieso bei jeder Anpassung neu.
Die Liste wird auch nicht allzu gross sein, daher denke ich, ist diese Lösung vertretbar?
Oder laufe ich da in Probleme?

Danke für eure Einschätzungen....
 

Neumi5694

Top Contributor
Probleme wirst du grundsätzlich nicht kriegen, das Vorgehen passt schon.
Eventuell muss ein ListSelectionListener noch angepasst werden, falls du z.B. nach dem Neusetzen der Liste nach Möglichkeit den vorher ausgewählten Wert nochmal auswählst. In dem Fall sollte der Listener wohl nichts machen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
richis-fragen Wie kann man den RowSorter dazu bringen die ursprünglich liste wieder anzuzeigen. AWT, Swing, JavaFX & SWT 28
M Vokabelprogram - Schleife für Liste soll schrittweise durchlaufen werden AWT, Swing, JavaFX & SWT 3
B JavaFX Prüfen ob ein Objekt sich mehrmals in einer Liste befindet AWT, Swing, JavaFX & SWT 5
M Synchronisierte Liste umdrehen AWT, Swing, JavaFX & SWT 1
F Swing Scrollbare Liste von JButton AWT, Swing, JavaFX & SWT 4
T Swing Objekte in Liste AWT, Swing, JavaFX & SWT 2
E Swing Liste in Scrollpane wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
S Swing jScrollPane - pro Eintrag der Liste, die jCheckBoxes Speichern die in dem Eintrag aktiviert wurden AWT, Swing, JavaFX & SWT 2
C Liste - ListView wird nicht angezeigt AWT, Swing, JavaFX & SWT 15
G Swing ComboBox: Auswahl eines Items der Liste durch Eingabe eines Buchstabens AWT, Swing, JavaFX & SWT 3
R Liste mit Bildern AWT, Swing, JavaFX & SWT 3
P Liste mit Datenobjekt synchron halten AWT, Swing, JavaFX & SWT 2
S Liste von JPanels mit festen Höhen AWT, Swing, JavaFX & SWT 3
L Schöne Ausgabe in Form einer Liste AWT, Swing, JavaFX & SWT 5
1 Liste mit Objekten Füllen AWT, Swing, JavaFX & SWT 7
TheWhiteShadow Swing Buttons in Liste AWT, Swing, JavaFX & SWT 7
D Jtable mit einer Liste befüllen AWT, Swing, JavaFX & SWT 3
P Liste mit Icons und mehreren Spalten AWT, Swing, JavaFX & SWT 7
P Text-Vorschläge für JTextField aus ner Liste laden AWT, Swing, JavaFX & SWT 8
H Puzzle - Listen erstellen, array & liste vergleichen AWT, Swing, JavaFX & SWT 28
A Swing Liste von komplexen Components AWT, Swing, JavaFX & SWT 2
A Programmieren einer Agenda mit einer Liste (als Applet und .txt zum Speichern) AWT, Swing, JavaFX & SWT 7
S JTree mit Liste zur Speicherung AWT, Swing, JavaFX & SWT 3
C Checkbox in Liste deaktivieren und paintComponent explizit aufrufen AWT, Swing, JavaFX & SWT 12
G Swing Komponente gesucht (Textfeld mit Liste) AWT, Swing, JavaFX & SWT 2
M Liste mittels SwingWorker füllen klappt nicht AWT, Swing, JavaFX & SWT 10
D Liste mit Tabellenkopf, Sortierung usw. AWT, Swing, JavaFX & SWT 2
T Swing Liste von Daten anzeigen AWT, Swing, JavaFX & SWT 4
P Swing Liste von Daten auf JFrame AWT, Swing, JavaFX & SWT 6
S Listener der mich informiert wann immer einer Liste ein Element hinzugefuegt wird? AWT, Swing, JavaFX & SWT 4
K Strings aus jTextArea in Liste oder Tabelle übertragen- wie? AWT, Swing, JavaFX & SWT 4
G JList und ein neues Element oben in der Liste einfügen AWT, Swing, JavaFX & SWT 4
J Eine Spezielle (JTable) Liste, wie kann ich das machen? AWT, Swing, JavaFX & SWT 3
L Objekte in Liste oder ähnliches anzeigen AWT, Swing, JavaFX & SWT 3
M Scrollbare Label-Liste AWT, Swing, JavaFX & SWT 6
G Liste einer JCombobox bekommen AWT, Swing, JavaFX & SWT 2
G Dynamische Menüs mit Liste von MRU Dateien AWT, Swing, JavaFX & SWT 2
G Liste in JTable einfügen AWT, Swing, JavaFX & SWT 4
zilti Liste in Swing? AWT, Swing, JavaFX & SWT 5
DEvent Je nach Auswahl in Liste entsprechende Input-Elemente anzeig AWT, Swing, JavaFX & SWT 2
B SWT - Buttons mit zusätzlicher Liste AWT, Swing, JavaFX & SWT 6
T die Liste der Elemente aus einer JComboBox auslesen AWT, Swing, JavaFX & SWT 6
G Jtable mittels Liste füllen AWT, Swing, JavaFX & SWT 3
J Liste aktualisieren oder GUI schließen? HILFE *verzweifelt* AWT, Swing, JavaFX & SWT 2
M JList - Auf ButtonDruck Liste anzeigen AWT, Swing, JavaFX & SWT 12
D Wie Darstellung / Layout als Liste AWT, Swing, JavaFX & SWT 2
P GetSelectetItem() erkennt Variable aus Liste nicht. AWT, Swing, JavaFX & SWT 2
H Liste von Font Sizes und Colors AWT, Swing, JavaFX & SWT 4
H JTabel - RowFilter Daten für Berechnung filtern AWT, Swing, JavaFX & SWT 6
B JavaFX das richtige ListView filtern AWT, Swing, JavaFX & SWT 2
L JavaFX VBox oder HBox children filtern? AWT, Swing, JavaFX & SWT 14
B Swing Tabelle(JTable) filtern swing GUI AWT, Swing, JavaFX & SWT 3
MrSnake Tabelle nach 2 Strings Filtern AWT, Swing, JavaFX & SWT 3
B 2D-Grafik Bild farblich filtern AWT, Swing, JavaFX & SWT 2
D Filtern mithilfe von logischen Ausdrücken AWT, Swing, JavaFX & SWT 2
J JTable filtern nach einer Spalte AWT, Swing, JavaFX & SWT 2
M JList Model filtern AWT, Swing, JavaFX & SWT 4
E gettext() filtern ( nur bestimmten text wwiteverarbeiten) AWT, Swing, JavaFX & SWT 4
maestr0 Dateiabhängiges-Filtern eines Treeviewers AWT, Swing, JavaFX & SWT 8
A Swing JFileChooser - Anzeige in Echtzeit filtern AWT, Swing, JavaFX & SWT 10
V JList filtern AWT, Swing, JavaFX & SWT 6
N update model nach dem filtern AWT, Swing, JavaFX & SWT 2
K Swing regexFilter() null filtern AWT, Swing, JavaFX & SWT 3
E Swing JTable Rows Filtern AWT, Swing, JavaFX & SWT 4
B Master-Detail Form und filtern AWT, Swing, JavaFX & SWT 2
Developer_X Image Texels filtern AWT, Swing, JavaFX & SWT 2
hdi Swing JTable & Filtern: Daten nicht in der View AWT, Swing, JavaFX & SWT 2
O Dateien aus Verzeichnis filtern und in JTable darstellen AWT, Swing, JavaFX & SWT 3
A JTree-Anzeige filtern AWT, Swing, JavaFX & SWT 7

Ähnliche Java Themen

Neue Themen


Oben