Viewerfilter mehr als ein Eintrag

javanoob42

Mitglied
Guten Tag liebe Leser,

ich hab im Augenblick ein Problem bezüglich meines Viewerfilters auf einer Table.
Und zwar habe ich für die Tabelle ein Textfeld, dass auf bestimmte Eingaben wartet.
so sollen z.B: Spaltennamen mit einem hinterhergeschobenen = zu der filterung der Spalte mit dem Wort führen. z.B. filtert spalte1=test die Spalte1 nach dem Wort test. Das funktioniert soweit auch. Ich habe in dem Viewerfilter die select Methode überschrieben und nach jeder Eingabe im Textfeld, also nach jedem Buchstaben, prüfe ich ab ob der Inhalt in der jeweiligen Spalte vorhanden ist und refreshe meinen Tableviewer.

Das Problem hierbei ist, dass ich eben nicht immer nur nach einem Wort filtern will. Es sollen auch Filter im Sinne von spalte1=test,test2 möglich sein. Und genau da versage ich. Sobald der Benutzer das Komma eingegeben hat und damit die Tabelle zum Teil schon gefilert wird ist die zweite Eingabe nur ein Zusatzfilter für die schon heruntergebrochene Tabelle. Das heisst eigentlich sollen in dem Beispiel alle Reihen angezeigt werden, die entweder test oder test2 als Daten führen. Da ich aber nach jedem Buchstaben alles durchprüfe führt es dazu, dass er erst komplett nach test filtert und danach erst nach test2...


Ich hoffe ich habe mich da verständlich ausgedrückt.

Zur Erläuterung nochmal ein genaueres Beispiel.

||column1 ||
||row1||data1 ||
||row2||data2 ||

Eingabe Filtertext: column1=data1
erwartete Ausgabe: data1
Ausgabe: data1

Eingabe Filtertext: column1=data1,data2
erwartete Ausgabe data1,data2
Ausgabe: keine Ausgabe, da zuerst nach data1 gefiltert und danach erst nach data2

Also ich hab hier mal versucht die wichtigsten Dinge meiner Methode rauszuextrahieren. Kann sein, dass ein paar Teile hier nun falsch sind, aber mir gehts eigentlich nur um den Grundgedanken.

Code:
@Override
    public boolean select(final Viewer viewer, final Object parentElement, final Object element) {
        final String filterString = filterText.getText().toLowerCase();
        if (filterString.length() == 0) { return true; }
     
        final mydata myData= (mydata) element;
        if (filterString.matches("columnName" + ".+")) {
        index = filterString.indexOf("columnName" + ".+");
       evaluateText(myData, filterString, i, index + tableColumnsText[i].length())  
    }

    public boolean evaluateText(final mydata data, final String filterText, final int beginningIndex) {
            subString = filterText.substring(beginningIndex, filterText.length());
            return evaluateString(data.getString(), subString);
    }


    public boolean evaluateString(final String cellString, final String commaString) {
        int countSubstrings = 0;
        final String[] items = commaString.split(",");
        countSubstrings = items.length;

        for (final String s : items) {
            if (s.length() != 0) {
                if (!cellString.contains(s)) { return false; }
            }
        }
        return true;
    }

Vielleicht hab ich ja auch einfach nur einen Hänger, aber vielleicht hat ja hier jemand schonmal ein ähnliches Problem gehabt.

Über Hilfe würde ich mich unheimlich freuen!
 

stg

Top Contributor
zum Vergleich einfach mal eine Filter-Funktion, die ich mir mal geschrieben habe:

Java:
public boolean in(Object value, Object filter, Locale locale) {
  if(filter == null) {
    return true;
  }  
  Collection<?> collection = null;
  if(filter.getClass().isArray()) {
    collection = Arrays.asList((Object[])filter);
  } else if(filter instanceof Collection) {
    collection = (Collection<?>) filter;
  } else {
    throw new FacesException("Filter value must be an array or a collection when using \"in\" filter constraint.");
  }  
  if(collection != null && !collection.isEmpty()) {
    if(value == null) return false;
    for (Object object : collection) {
      if(object.equals(value)) {
      return true;
    }
  }  
    return false;
  }
  else {
    return true;
  }
}

Wie du siehst mache ich es vom Prinzip her eigentlich ganz ähnlich, nur ist der "boolsche Ausdruck" quasi invertiert. Ich prüfe in jedem Schleifendurchlauf, ob das Filterkritierum erfüllt ist und gebe, falls dem so ist, true zurück und am Ende, wenn der Vergleich für alle Filter-Optionen false ist, dann gebe ich false zurück.

(Der Code basiert auf der in-Filterfunktion aus PrimeFaces, ist aber leicht an meine Bedürfnisse angepasst.)
 

javanoob42

Mitglied
Das Problem dabei ist, dass ich nach jedem Buchstaben sozusagen neu filtern muss. Das bedeutet, die Tabelle muss nach einer Eingabe wie column=data schon nach data gefiltert sein. Und erst wenn danach die zweite Eingabe hinzukommt kann ich weiterfiltern. Das Problem ist zu dem Zeitpunkt stehen schon garnicht mehr alle Werte in meiner Tabelle drinn(da ja schon gefiltert wurde).

Ich glaub ich versteh deinen Ansatz nicht so richtig.

e// Ich kann mir natuerlich die nicht gefilterte Tabelle irgendwo abspeichern, jedoch wird das bei zu vielen Werten einfach zu aufwändig
 

stg

Top Contributor
Inwiefern zu aufwändig?
Du hst einen Aufwand von O(n*k), wobei n Die Anzahl an Reihen der ungefilterten Tabelle entspricht und k der Anzahl an Filter-Optionen. Solange wir da nicht von vielen tausend Reihen reden, sollte das kein großes Problem darstellen. Aber selbst dann sollte der Aufwand vom Filtern im Vergleich zur Darstellung selbst verschwindend gering sein.
Die nicht gefilterte Tabelle solltest du vermutlich so oder so irgendwo vorhalten, denn was machst du, wenn der User die Filter-Option wieder entfernt? Zum Beispiel, weil er sich schlicht verschrieben hat. Willst du dann alle Daten neu abholen, von wo auch immer?
 

javanoob42

Mitglied
Gibt es keine Möglichkeit nach Anwendung eines Filters noch auf die ungefilterte Tabelle zuzugreifen? Also ausser durch eigenes Abspeichern
 

stg

Top Contributor
Wenn du die ungefilterte Liste nirgends vorhältst, dann kannst du natürlich nicht mehr darauf zugreifen.
 

javanoob42

Mitglied
Ok, das heisst ich habe ein Array, in dem alle Werte vorhanden sind und eine Filterfunktion, die immer auf diesem Array arbeitet. Was ist dann der schlauste Weg die Tabelle selbst zu updaten?
Kann ich Zeilenin SWT einfach ausblenden oder muss ich sie bei nicht passieren der Filterfunktion herauslöschen und später ggf. wieder hinzufügen?
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
R auto. Importanweisungen für javafx funktioniert in Eclipse nicht mehr AWT, Swing, JavaFX & SWT 4
W JEditorPane textausrichtung nach settext funktioniert nicht mehr AWT, Swing, JavaFX & SWT 11
_user_q Objekt.setSelected(false), wenn es nicht mehr fokussiert wird AWT, Swing, JavaFX & SWT 2
G Gui updated beim zweiten Aufruf nicht mehr AWT, Swing, JavaFX & SWT 15
VPChief Swing Eclipse: Nach Exportieren, Button funktioniert nicht mehr AWT, Swing, JavaFX & SWT 26
J import javafx.fxml* bei JavaFX 13 geht nicht mehr AWT, Swing, JavaFX & SWT 7
F Kein JavaFX mehr im Eclipse Wizard AWT, Swing, JavaFX & SWT 1
P JavaFX Fenster lädt nicht mehr AWT, Swing, JavaFX & SWT 4
kodela Accalerator für einige Menüoptionen funktioniert nicht mehr AWT, Swing, JavaFX & SWT 3
it_is_all JLabel.setIcon - funktioniert nicht mehr AWT, Swing, JavaFX & SWT 2
F JList zeigt keine Einträge mehr AWT, Swing, JavaFX & SWT 1
H Musik wird nach dem erstellen der .jar Datei nicht mehr abgespielt AWT, Swing, JavaFX & SWT 1
A Swing Bild wird nicht mehr geladen AWT, Swing, JavaFX & SWT 4
T ActionListener nimmt JTextField nicht mehr an. AWT, Swing, JavaFX & SWT 2
X Swing Anwendung regaiert auf keine Buttons mehr wärend while(scanner.hasNextLine()) ausgeführt wird. AWT, Swing, JavaFX & SWT 4
I JavaFX TreeView Pfeil nicht mehr Klickbar machen AWT, Swing, JavaFX & SWT 1
I Scene Builder kann .fxml nicht mehr laden AWT, Swing, JavaFX & SWT 3
M SWT View nicht mehr sichtbar AWT, Swing, JavaFX & SWT 2
P Anwendung kommt nach minimieren nicht mehr in den Vordergrund AWT, Swing, JavaFX & SWT 5
M JXTreeTable: Spaltengröße läßt sich nicht mehr festlegen AWT, Swing, JavaFX & SWT 0
E JavaFx Screne mehr als ein "Objekt" zuordnen ? AWT, Swing, JavaFX & SWT 2
D Event Handling MouseListener funktioniert seit Java 8 nicht mehr AWT, Swing, JavaFX & SWT 13
L Tooltips werden nicht mehr angezeigt AWT, Swing, JavaFX & SWT 5
T Swing Combox Popup vergroessert - Arrow nicht mehr vorhanden! AWT, Swing, JavaFX & SWT 4
Y Applet Javascript / Java Methodenaufruf in nicht mehr aktueller JavaVersion AWT, Swing, JavaFX & SWT 0
A Swing " comboboxes vergl. wenn aus der 1. etwas gewählt wurde ist, es in der 2. nicht mehr sichtbar AWT, Swing, JavaFX & SWT 9
Doopy Event Handling KeyListener funktioniert nach Restart nicht mehr AWT, Swing, JavaFX & SWT 7
G Eclipse: Design Tab wird nicht mehr angezeigt AWT, Swing, JavaFX & SWT 4
J Abbrechen muss immer einmal mehr gedrückt werden AWT, Swing, JavaFX & SWT 3
E Animation läuft nicht mehr flüssig AWT, Swing, JavaFX & SWT 8
N Swing Netbeans 7.1 keine DesktopApplication mehr möglich ? AWT, Swing, JavaFX & SWT 15
M SWT Wie mehr als 5000 Einträge zur Auswahl geben? AWT, Swing, JavaFX & SWT 9
M Swing Focus für Buttons deaktiviert --> keine Reaktion mehr auf Tastendrücke AWT, Swing, JavaFX & SWT 5
C MouseMotionListener fired keine Events mehr wenn in Button AWT, Swing, JavaFX & SWT 2
T JList ruft getElementAt nicht mehr auf AWT, Swing, JavaFX & SWT 4
R Durch Listener lässt sich Programm nicht mehr ausführen AWT, Swing, JavaFX & SWT 4
B ButtonGroup mit mehr als einer Selection AWT, Swing, JavaFX & SWT 2
K SAF und SQLServer gehen plötzlich nicht mehr AWT, Swing, JavaFX & SWT 30
R JTextfield nach JComboBox nicht mehr beschreibbar... AWT, Swing, JavaFX & SWT 11
B Swing verschachteltes GUI: repaint() ändert mehr als nur gewünschte Component AWT, Swing, JavaFX & SWT 4
B Komponenten nach Skalierung nicht mehr ansprechbar AWT, Swing, JavaFX & SWT 9
W JLabel-Text ab best. Zeitpunkt nicht mehr verändern AWT, Swing, JavaFX & SWT 2
kodela Clipboard übernimt mehr als es soll AWT, Swing, JavaFX & SWT 15
G JTree wird nicht mehr geleert (deleteAllEntries) AWT, Swing, JavaFX & SWT 3
U JComboBox zeigt den Aufklapppfeil nicht mehr an AWT, Swing, JavaFX & SWT 7
A Buttonklicks und mehr AWT, Swing, JavaFX & SWT 10
0 AWT Graphics2D.drawImage() funktioniert nicht mehr korrekt mit Core i7 AWT, Swing, JavaFX & SWT 4
R Programm nicht mehr in der Taskleiste AWT, Swing, JavaFX & SWT 2
M KeyListener reagiert nach Buttondruck nicht mehr AWT, Swing, JavaFX & SWT 4
M Action.DISPLAYED_MNEMONIC_INDEX_KEY geht nicht mehr AWT, Swing, JavaFX & SWT 2
M Button funktioniert nicht mehr wenn Schleife läuft AWT, Swing, JavaFX & SWT 3
G JFormattedTextField lässt sich nicht mehr leeren AWT, Swing, JavaFX & SWT 4
L JTextArea in JScrollPane verkleinert sich nicht mehr AWT, Swing, JavaFX & SWT 8
S Zugriff auf Elemente funktioniert mit SWING nicht mehr AWT, Swing, JavaFX & SWT 5
G setLocationRelativeTo(frame) geht plötzlich nicht mehr AWT, Swing, JavaFX & SWT 3
S Thread beenden, wenn Component nicht mehr benötigt wird AWT, Swing, JavaFX & SWT 12
G 3 oder mehr JTable nebeneinander gleichzeitig vert. scrollen AWT, Swing, JavaFX & SWT 4
G Komponenten mehr als unsichtbar machen AWT, Swing, JavaFX & SWT 5
S JList gibt nach Sortierung mit Collections keine Anzahl mehr AWT, Swing, JavaFX & SWT 3
J Ubuntu 7.04 - JTextField reagiert nicht mehr AWT, Swing, JavaFX & SWT 3
S JTable soll nicht mehr editierbar sein! AWT, Swing, JavaFX & SWT 2
J JSlider regaiert unter Java 1.6 nicht mehr AWT, Swing, JavaFX & SWT 7
C string wird mehr fach gezeichnet AWT, Swing, JavaFX & SWT 3
M image rotate, bild nicht mehr zu sehen AWT, Swing, JavaFX & SWT 9
M JList nimmt keine Selektierung mehr an AWT, Swing, JavaFX & SWT 7
M Codeteilung -> Canvas zeichnet nicht mehr AWT, Swing, JavaFX & SWT 40
S JTree wird nicht mehr gezeichnet AWT, Swing, JavaFX & SWT 4
A Tabelle: "Blinde" Felder und mehr AWT, Swing, JavaFX & SWT 2
S JAR -> Icons werden nicht mehr angezeigt AWT, Swing, JavaFX & SWT 11
M GridLayout funktioniert nicht mehr. AWT, Swing, JavaFX & SWT 2
L JProgressBar wird nicht mehr aktualisiert AWT, Swing, JavaFX & SWT 2
R KeyListener funkt. nach austauschen der Panels nicht mehr? AWT, Swing, JavaFX & SWT 2
G jbutton mit linebreak. setEnabled geht nicht mehr AWT, Swing, JavaFX & SWT 4
M JTree: Selektion der Elemente nicht mehr sichtbar AWT, Swing, JavaFX & SWT 6
B mehr über SWT? AWT, Swing, JavaFX & SWT 9
G Eintrag soll nur einmal in Listview zu sehen sein AWT, Swing, JavaFX & SWT 3
H Swing Auf Klick auf Menü-Eintrag reagieren AWT, Swing, JavaFX & SWT 0
S Swing jScrollPane - pro Eintrag der Liste, die jCheckBoxes Speichern die in dem Eintrag aktiviert wurden AWT, Swing, JavaFX & SWT 2
C JComboBox Objecte übergeben und Eintrag auswählen AWT, Swing, JavaFX & SWT 3
P Einer JList mit eigenem ListModel einen Eintrag hinzfügen AWT, Swing, JavaFX & SWT 5
D Swing JComboBox (DefaultComboBoxModel) überschreibt Eintrag beim erstellen AWT, Swing, JavaFX & SWT 0
D Apple MenuBar Eintrag "java" AWT, Swing, JavaFX & SWT 15
F Swing String[] in JTextArea ausgeben. Jeder Eintrag in neue Zeile, aber ohne "\n"- Geht das? AWT, Swing, JavaFX & SWT 3
Ollek JList - neuer Eintrag in ArrayList dadurch keine Anzeige der Objekte AWT, Swing, JavaFX & SWT 18
N Swing Eintrag in JTable an dessen TableModel weiterreichen AWT, Swing, JavaFX & SWT 3
F Wert zu Eintrag in ComboBox speichern?! AWT, Swing, JavaFX & SWT 7
W Swing Tag Oder Custom Eintrag AWT, Swing, JavaFX & SWT 7
S JTable letzen Eintrag anzeigen AWT, Swing, JavaFX & SWT 3
D JCombobox mit <neuer Eintrag> AWT, Swing, JavaFX & SWT 10
Z JLIST / Model erster EINTRAG AWT, Swing, JavaFX & SWT 11
hdi SWT JComboBox : Drop-Down Header ohne Eintrag AWT, Swing, JavaFX & SWT 6
C JList: Eintrag anklicken & JTextfield mit Text aus MySQL füllen? (Screenshot dabei) AWT, Swing, JavaFX & SWT 8
R JList: auf den selektierten Eintrag reagieren AWT, Swing, JavaFX & SWT 4
hdi JFrame ohne Eintrag in der Taskleiste AWT, Swing, JavaFX & SWT 12
V JComboBox Eintrag nicht anwählbar machen? AWT, Swing, JavaFX & SWT 3
G JList - Beim Mousehover Eintrag selektieren AWT, Swing, JavaFX & SWT 12
P Bei JComboBox einem Eintrag Wert zuweisen AWT, Swing, JavaFX & SWT 7
G JList eintrag "nicht anklickbar" machen AWT, Swing, JavaFX & SWT 3
M Jlist Eintrag mit suche selektieren AWT, Swing, JavaFX & SWT 4
H JComboBox mit nicht selektierbarem Eintrag AWT, Swing, JavaFX & SWT 7

Ähnliche Java Themen

Neue Themen


Oben