PatternFilter AND verknüpfen

Status
Nicht offen für weitere Antworten.

martin82

Mitglied
Hi,

ich verwende die JXTable Komponente von SwingX und möchte eine Tabelle filtern. Ich hab das mittels folgendem Code realisiert:
Java:
int col = jxTable.getColumn("COUNTRY").getModelIndex();
    jxTable.setFilters(new FilterPipeline(
        new Filter[] { new PatternFilter("A.*", 0, col) }));

Nur hab ich jetzt das Problem, dass ich 2 verschiedene Spalten mit einem AND-Filter verknüpfen will. Bei einer Spalte ist mir klar wie es funktioniert, aber wie funktionierts bei 2 Spalten?
 

byte

Top Contributor
Mit Highlightern kann man Predikate definieren, aber ich glaube, das geht mit Filtern nicht.

Java:
                    Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
                    
                    List<HighlightPredicate> patterns = new ArrayList<HighlightPredicate>();
                    for (int i = 0; i < numColumns; i++) {
                        patterns.add(new PatternPredicate(pattern, i));
                    }
                    
                    filterHighlighter = new ColorHighlighter(new NotHighlightPredicate(new HighlightPredicate.OrHighlightPredicate(patterns)), null, Color.LIGHT_GRAY);

Da Du aber nur eine AND Verknüpfung brauchst, sollte es doch klappen, wenn Du für jede Spalte einen eigenen Filter in die Pipeline wirfst:
Java:
new Filter[] { new PatternFilter("A.*", 0, col1), new PatternFilter("A.*", 0, col2), new PatternFilter("A.*", 0, col3) }));
 

martin82

Mitglied
Ja ok das funktioniert. Danke.

Und wie kann man es realisieren sowas wie Bereichsfilter hinzuzufügen? Bsp.: Ich habe eine Spalte mit Nummern von 1 bis 100 und möchte jene zwischn 40 und 50 filtern(>40 AND <50).

Ist wahrscheinlich eine banale Frage aber ich hab noch nie was mit dieser Pattern-Klasse gemacht...
 

byte

Top Contributor
Verstehe die Frage nicht. Die Nummer der Spalte wird doch jeweils mitgegeben? Das Pattern wird dann auf den Inhalt der jeweiligen Spalte angewendet.
 

martin82

Mitglied
Die Frage war jetzt auf ein und dieselbe Spalte gemeint.
Ich bräuchte ein Pattern welches einen Bereich filtert. In einer IF-Abfrage würde ich es folgendermaßen schreiben:
Java:
if(value<50 && value >40);
 

byte

Top Contributor
Was ist mit value gemeint, die Zeile? Du willst also nur z.b. die Zeilen 40-50 highlighten?

Du kannst Dir einen eigenen Highlighter von AbstractHighlighter ableiten. Dann überschreibst Du canHighlight(). Dort hast Du über ComponentAdapter#row an die Zeile ran.
 

martin82

Mitglied
value soll der Wert einer Zelle sein.

Ich will alle Zeilen welche in der Spalte X die Werte zwischen 40 und 50 haben anzeigen bzw. filtern, nicht highlighten.
 

martin82

Mitglied
Ok. Bin eben auf der Suche nach Beispielen für regex. Blick da noch nicht durch. Hättest du ein Beispiel für so einen Bereichs-Pattern? ...oder evt. eine gute Doku zu diesem Thema?
 
J

JohannisderKaeufer

Gast
Was du auch machen könntest, wäre dir einen eigenen Filter zu schreiben.

Wenn du dir die Sourcen von PatternFilter anschaust, würdest du sehen, das das garnicht mal so aufwendig ist.

Von Filter erben, das ganze gedöhns mit Pattern entfernen (Konstruktor, getter setter) und durch eine Angabe von Ober- (50) und untergrenze(40) ersetzen.
Die meisten anderen Methoden sollte man nach einem kurzen überfliegen genauso übernehmen können.
Und in der Methode test(int row)
Java:
return isEmpty(text) ? false : pattern.matcher(text).find();

das pattern.matcher(text).fing();
duch etwas wie
Integer.parse(text)<obergrenze && Integer.parse(text)>untergrenze
ersetzen.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben