2011-03-04 109 views
1

我無法完全實現這個功能,而我發現的例子只能使用一個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 

如果有人可以提供工作片段,我想在最後一行做什麼,它將不勝感激。目前維護兩個單獨的表模型來規避這個問題,並且我想避免重複數據。

感謝, 凱

+1

也許如果你發佈了一個帶有真實數據的「unworking snippet」,那麼有人可以創建一個「工作片段」。我們不知道你的真實數據是什麼樣子,所以很難創建和測試任何代碼。 – camickr 2011-03-04 16:03:44

+0

我想這更像是一個語法問題。您可以在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

回答

6

你的最後一行甚至不進行編譯,因爲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還。

+0

是的,你是對的,另一箇中間數組列表。似乎需要更詳細的一點,但是,是的,這就是API所說的......謝謝你的幫助。 – user644815 2011-03-04 19:05:41