[英]Java swing toggle button to filter jtable rows
我有一個JTable
,它包含一個自定義AbstractTableModel
,當調用getValueAt
時它返回一個對象。 當然,我有一個自定義的TableCellRenderer
,它能夠從對象中獲取/構造文本,以便可以顯示它。
但是現在我想寫一個過濾器。 過濾器將是一個簡單的切換按鈕。 當它打開時,我希望應用過濾器;當它關閉時,我希望除去過濾器。
由於這個原因,我有兩個問題。
首先,我絕對不知道當必須按對象而不是按原語進行過濾時,如何編寫過濾器。
其次,我不知道如何將所述過濾器附加到切換按鈕以能夠打開和關閉它。
如果這是一個遲鈍的問題,很抱歉,但是http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#sorting是我看到的最沒用的文檔,因為沒有進行深入的解釋。
感謝任何人的幫助。
編輯:該對象包含多個字段,但是我對兩個過濾器切換特別感興趣。 當我說isSuper
,一個返回boolean
值,而當我調用getName
時,第二個返回string
。 如果打開了第一個切換,則它應顯示在isSuper
上返回true的所有條目,而第二個切換應顯示當我調用getName
時name包含兩個單詞(包含空格)的所有條目。
首先,我絕對不知道當必須按對象而不是按原語進行過濾時,如何編寫過濾器。
您閱讀過RowFilter
API嗎? 它顯示了如何基於自定義對象創建自定義過濾器的示例。
其次,我不知道如何將所述過濾器附加到切換按鈕以能夠打開和關閉它。
您是否閱讀了教程並嘗試運行演示? 每次用戶更改文本字段中的文本時,本教程將使用DocumentFilter動態更改過濾器。 因此,本教程向您展示了如何根據用戶輸入動態更改過濾器。 您可以修改代碼以在每次按下切換按鈕時更改過濾器。
它包含一個自定義的AbstractTableModel,當調用getValueAt時返回該對象。 當然,我有一個自定義的TableCellRenderer,它能夠從對象中獲取/構造文本,以便可以顯示它。
與我的答案無關,但我不太理解那句話。 您是說模型中的每個單元格返回一個不同的對象,還是每個單元格都返回相同的對象,但是您只是為column1,column2,column3等顯示了對象的不同屬性? 無論哪種方式,聽起來都像是一個怪異的設計。 我們可能會提出更好的建議。 發布說明問題的SSCCE。
老實說, JavaDocs的拼寫很好。
有了這么少的信息,您最好的概述就是...
TableRowSorter<TableModel> trs = new TableRowSorter<TableModel>();
table.setRowSorter(trs);
// Create the row filder...
trs.setRowFilter(new RowFilter<TableModel, Integer>() {
@Override
public boolean include(RowFilter.Entry<? extends TableModel, ? extends Integer> entry) {
boolean include = false;
// Returns the value for the specific column...
CustomObject value = (CustomObject)entry.getValue(filterColumn);
if (filterBySuper) {
include = value.isSuper();
} else {
include = value.getName().startsWith(fistPart) && value.getName().endWith(lastPart);
}
return include;
}
});
當您想更新過濾器時,只需調用...
trs.sort();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.