2014-02-06 66 views
1

再次詢問我的Jtable!我用JCheckBoxes過濾結果!當我檢查一個複選框時,結果是可以的,但是當我檢查兩個或多個結果時,出現結果並且按照最後一個JCheckBox的過濾器而不是所有選中的JCheckBox的過濾器。重要的是要說所有複選框都指向表格的一列,並且在表格之外,並且僅用於過濾其中的結果。使用多個Jcheckbox的JTable過濾器

我的過濾功能是本

private void newFilter(String age){ 
    RowFilter<DefaultTableModel,Object> rf = null; 
    try{ 
     rf = RowFilter.regexFilter("20"); 
     }catch(java.util.regex.PatternSyntaxException e){ 
     return; 
    } 
    sorter.setRowFilter(rf); 
} 

編輯:在表中只有結果,應該出現! ckeckboxes在Jtable之外,僅用於過濾器,例如,如果我選中表格中的複選框20,將只顯示年齡爲20歲的人,但如果我檢查20歲和40歲的表格,則只會顯示與40歲,也是20歲!

+0

像[這](HTTP:/ /stackoverflow.com/a/4528604/230513)或者[this](http://stackoverflow.com/a/17856131/230513)? – trashgod

+0

@trashgod他們都不是!在表中只有結果,應該出現! ckeckboxes在Jtable之外,僅用於過濾器,例如,如果我選中表格中的複選框20,將只顯示年齡爲20歲的人,但如果我檢查20歲和40歲的表格,則只會顯示與40歲,也是20歲! – gimbo

+0

請更新您的問題以包含此說明。 – trashgod

回答

2

的ckeckboxes是JTable外,僅被用於過濾器...

您可以組合,如圖所示herehere適用JTable行篩選。使用Action來封裝功能,如here所示。讓Action更新模型,並且偵聽視圖將自行更新以作爲響應。

附錄:作爲具體例,在example cited改變JButtonJCheckBox

frame.add(new JCheckBox(new AbstractAction("Toggle filter")… 

image

+0

我已經看到了Java教程,但我沒有找到解決方案:S – gimbo

+0

另外您還提供了有關其他內容的解決方案,我想!不能碰到任何東西! – gimbo

+0

我認爲我不清楚...我可以用一個複選框過濾表格,問題是當我嘗試用兩個或多個複選框過濾它時!如果您可以將我的代碼轉換爲我所說的話,我將不勝感激!否則提供給我其他更簡單的例子! – gimbo

0

以在關注@trashgod最後評論我來到翻過,改變了我的過濾器這樣的,現在,它完美的作品:

private void newFilter() { 
    RowFilter<Object, Object> rf = null; 
    List<RowFilter<Object, Object>> filters = new ArrayList<RowFilter<Object, Object>>(
      2); 
     if (c20.isSelected()) { 
      filters.add(RowFilter.regexFilter("20")); 
     } 
     if (c40.isSelected()) { 
      filters.add(RowFilter.regexFilter("40")); 
     } 

    try { 
     rf = RowFilter.orFilter(filters); 
    } catch (java.util.regex.PatternSyntaxException e) { 
     return; 
    } 
    sorter.setRowFilter(rf); 
}