Java Swing: объединение RowFilter.andFilter с RowFilter.orFilter - PullRequest
1 голос
/ 04 марта 2011

Я не мог заставить это работать, и примеры, которые я нашел, работали только с одним RowFilter.andFilter или RowFilter.orFilter.Есть ли способ объединить два, чтобы получить что-то вроде (A || B) && (C || D)?Ниже приведен пример кода того, что я пытаюсь сделать.

ArrayList<RowFilter<Object,Object>> arrLstColorFilters = new ArrayList<RowFilter<Object,Object>>();
ArrayList<RowFilter<Object,Object>> arrLstCandyFilters = new ArrayList<RowFilter<Object,Object>>();
RowFilter<Object,Object> colorFilter;
RowFilter<Object,Object> candyFilter;
TableRowSorter<TableModel> sorter;

// OR colors
RowFilter<Object,Object> blueFilter = RowFilter.regexFilter("Blue", myTable.getColumnModel().getColumnIndex("Color"));
RowFilter<Object,Object> redFilter = RowFilter.regexFilter("Red", myTable.getColumnModel().getColumnIndex("Color"));
arrLstColorFilters.add(redFilter);
arrLstColorFilters.add(blueFilter);
colorFilter = RowFilter.orFilter(arrLstColorFilters);

// OR candies
RowFilter<Object,Object> mAndMFilter = RowFilter.regexFilter("M&M", myTable.getColumnModel().getColumnIndex("Candy"));
RowFilter<Object,Object> mentosFilter = RowFilter.regexFilter("Mentos", myTable.getColumnModel().getColumnIndex("Candy"));
arrLstCandyFilters.add(mAndMFilter);
arrLstCandyFilters.add(mentosFilter);
candyFilter = RowFilter.orFilter(arrLstCandyFilters);

// Mentos and M&Ms that are red or blue (this is where I'm stuck)
sorter.setRowFilter(RowFilter.andFilter(candyFilter, colorFilter);  //this does not work

Если бы кто-то мог предоставить рабочий фрагмент того, что я пытаюсь сделать в последней строке, это было бы очень полезно.В настоящее время ведутся две отдельные модели таблиц, чтобы обойти эту проблему, и я хотел бы избежать дублирования данных.

Спасибо, Кай

1 Ответ

6 голосов
/ 04 марта 2011

Ваша последняя строка даже не компилируется, потому что andFilter также требует список вместо отдельных аргументов.

В противном случае ваш пример работает в моих тестах.Я заменил последнюю строку в вашем примере следующим кодом:

ArrayList<RowFilter<Object, Object>> andFilters = new ArrayList<RowFilter<Object, Object>>();
andFilters.add(candyFilter);
andFilters.add(colorFilter);

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

// Mentos and M&Ms that are red or blue
sorter.setRowFilter(RowFilter.andFilter(andFilters));

myTable.setRowSorter(sorter);

Пожалуйста, убедитесь, что вы инициализируете TableRowSorter с соответствующей моделью таблицы.

...