[英]How to disable column header sorting in a jtable after RowFilter filtering is applied
[英]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.