簡體   English   中英

JTable排序和過濾

[英]JTable Sorting and Filtering

我正在創建一個使用兩列過濾JTable內容的程序。 我使用了RowSorter,一切正常-至少根據我能看到的(視圖)。

可以雙擊表中的每一行以打開一個對話框。 該對話框允許您編輯表上的信息。 但是,對話框上的信息仍然是原始視圖的信息(使用過濾之前)。

例:

在過濾表的第一行之前,是第a行。 過濾后,表的第一行是b行。

但是,當我雙擊以打開第一行的對話框時(過濾后,現在應該是b行,將打開a行的對話框。)[希望我已經對此進行了足夠詳盡的解釋]

我認為我的問題是過濾器發生后,模型沒有更新。 我試過了:

        for(int i = 0; i < table.getRowCount(); i++){
        table.convertRowIndexToView(i);
    }

for(int i = 0; i < table.getRowCount(); i++){
        table.convertRowIndexToModel(i);
    }

使用列標題對表進行排序時,我也遇到類似的問題。

我該如何解決這個問題?

我認為我的問題是過濾器發生后,模型沒有更新

該模型永遠不會更新。

僅更新視圖以按排序/過濾的順序顯示來自模型的數據。

可以雙擊表中的每一行以打開一個對話框。

因此,我假設您將一行數據復制到對話框,以便可以對其進行編輯,然后再添加回原始模型。

因此,您需要使用convertRowIndexToModel(...)獲取模型行號,以便可以訪問要在編輯對話框中顯示的模型數據。 您只對要編輯的行(而不是整個表)執行此操作。

請參閱有關JTable的教程,其中有一個關於Comparator出色示例以及有關如何使用TableModel的很好的解釋

更改數據后,您可以刷新表,如下所示;

for(int i = 0; i < table.getRowCount(); i++)
{         table.convertRowIndexToModel(i);     } 

table = new jTable(myModel);

要么

myModel.fireTableDataChanged()

希望能幫助到你

布拉克

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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