我無法完全實現這個功能,而我發現的例子只能使用一個RowFilter.andFilter或RowFilter.orFilter。有沒有辦法把兩個結合得到像(A || B)& &(C || D)?以下是我正在嘗試的一些示例代碼。Java Swing:將RowFilter.andFilter與RowFilter.orFilter結合使用
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
如果有人可以提供工作片段,我想在最後一行做什麼,它將不勝感激。目前維護兩個單獨的表模型來規避這個問題,並且我想避免重複數據。
感謝, 凱
也許如果你發佈了一個帶有真實數據的「unworking snippet」,那麼有人可以創建一個「工作片段」。我們不知道你的真實數據是什麼樣子,所以很難創建和測試任何代碼。 – camickr 2011-03-04 16:03:44
我想這更像是一個語法問題。您可以在api文檔中分別創建RowFilter.orFilter和RowFilter.andFilter: http://download.oracle.com/javase/6/docs/api/javax/swing/RowFilter.html#andFilter%28java.lang.Iterable %29 http://download.oracle.com/javase/6/docs/api/javax/swing/RowFilter.html#orFilter%28java.lang.Iterable%29 – user644815 2011-03-04 17:15:49