Swing RowFilter combine orFilter and andFilter

BladeUser

Neues Mitglied
Hallo,

ich versuche seit 2 Tagen vergeblich einem RowFilter die Kombination aus einem or & and Filter verständlich zu machen.

Hier das Ausgangsproblem:
Ich besitze eine Tabelle mit 8 Kriterien. Eine einfache andFilterung ist nicht das Problem. Jedoch will ich gewisse Kriterien mehrfach verwenden. D.h. (Kriterium 1 oder Kriterium 2 aus Spalte 1) UND (Kriterium 3 oder Kriterium 4 aus Spalte 2).

Es erscheint keine Fehlermeldung, jedoch bleibt die Auswahl leer :bahnhof:

Hier mein bisheriger Quellcode:

Java:
List<RowFilter<Object, Object>> filtersAND = new ArrayList<RowFilter<Object, Object>>(2);
List<RowFilter<Object, Object>> filtersOR = new ArrayList<RowFilter<Object, Object>>(2);
ArrayList<Integer> columns = new ArrayList<Integer>();   //merkt sich die Kriterien, damit ein Zweitkriterium als Oder gefiltert wird

if (!kundenkategorie.equals("")) {
			filtersAND.add(RowFilter.regexFilter(kundenkategorie, table.getColumnIndex("Kundenkategorie")));
			columns.add(table.getColumnIndex("Kundenkategorie"));
		}
		if (!vertragsgrundlage.equals("")) {
			filtersAND.add(RowFilter.regexFilter(vertragsgrundlage, table.getColumnIndex("Vertragsgrundlage")));
			columns.add(table.getColumnIndex("Vertragsgrundlage"));
		}

for (int i = 0; i < filter_model.size(); i++) {
			String eintrag = filter_model.get(i);
			String spalte = eintrag.substring(0, eintrag.indexOf(":"));
			eintrag = eintrag.substring(eintrag.indexOf(":") + 1);
			if (columns.contains(table.getColumnIndex(spalte))) {
				filtersOR.add(RowFilter.regexFilter(eintrag, table.getColumnIndex(spalte)));
			} else {
				filtersAND.add(RowFilter.regexFilter(eintrag, table.getColumnIndex(spalte)));
				columns.add(table.getColumnIndex(spalte));
			}
		}

		RowFilter<Object, Object> or;
		RowFilter<Object, Object> and;
		ArrayList<RowFilter<Object, Object>> finalFilters = new ArrayList<RowFilter<Object, Object>>();

		if (filtersOR.size() > 0) {
			or = RowFilter.orFilter(filtersOR);
			finalFilters.add(or);
		}
		if (filtersAND.size() > 0) {
			and = RowFilter.andFilter(filtersAND);
			finalFilters.add(and);
		}

		TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(table.getModel());

		sorter.setRowFilter(RowFilter.andFilter(finalFilters));

		UebersichtPanel.this.table.setRowFilter(RowFilter.andFilter(finalFilters));

Für jede Hilfe die kommt, danke im Voraus.
Grüße
 
Zuletzt bearbeitet:

bERt0r

Top Contributor
Reicht es nicht wenn dir einen Filter machst (erben von RowFilter) und dir einfach die Kriterien nach denen du Filterst in einer 2 Map<Spalte,Wert> merkst (Eine für und, eine für oder)? Ehrlich gesagt versteh ich nicht so ganz was du da vorhast in deinem Code.
 
Zuletzt bearbeitet:

BladeUser

Neues Mitglied
In Worten ausgedrückt, mache ich folgendes im Code:

Ein Kriterium das einer Kategorie entspricht (z.B. Kundenkategorie) wird beim ersten Mal als AND hinzugefügt. Sollte dieses Kriterium im Filter schon vorhanden sein, füge ich das zweite Kriterium für Kundenkategorie als OR hinzu.

Anschließend füge ich beide OR und AND Filter einem finalFilter hinzu den ich auch setze. Der Finalfilter enthält somit zwei Einzelfilter bestehend aus einem OR und einem AND Filter.
 

bERt0r

Top Contributor
Wenn du einen Und-Filter hast und in einer Spalte (Kategorie) zwei Werte drinhast kann da ja nichts rauskommen. In einer Zeile können doch schwer mehrere Werte aus aus einer Spalte auftreten.
 

Ähnliche Java Themen


Oben