簡體   English   中英

Java Swing切換按鈕過濾JTable行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM