2016-10-02 66 views
1

我已經實現了一個JTable,我可以在其中使用textField搜索條目。如何在分揀機更改行順序後更新JTableModel?

當發出請求時,我的代碼獲取DefaultTableModel,在每列和每行中查找元素,然後將表中的選擇設置爲找到元素的行。

這是有效的,但如果我通過單擊任何列對錶格進行排序,這是沒有用的,因爲排序似乎沒有更新DefaultTableModel

表是一個更大的項目,該項目的一部分極其複雜和充滿依賴的,所以我不能發佈一個小例子,但我認爲這將概括:

給出一個DefaultTableModel A充滿非有關JTable B的排序數據,其中B.setAutoCreateRowSorter()true,在幾次/任何多重排序A之後如何更新B

我已閱讀文檔和還研究了這一點:

http://www.codejava.net/java-se/swing/6-techniques-for-sorting-jtable-you-should-know

除了挖了一個位爲TableRowSorter#addRowSorterListener,但它只能告訴我,有一列被排序,不是真的有用。除非當然我使用那一列來嘗試對多維數組中的所有值進行排序,然後清除表格,然後將所有內容都分配回去..但顯然這對於​​我而言並不是真正的選項。

請參閱本作由RowSorterEvent提供的信息:

https://docs.oracle.com/javase/7/docs/api/javax/swing/event/RowSorterEvent.html

有人能指出我在正確的方向?

回答

4

當一個請求時,我的代碼獲取的DefaultTableModel,會在每列和行的元素...

所以不要搜索的TableModel。您可以使用table.getValueAt(...)方法在表格的每一行/列中搜索元素。數據將以當前排序的表格順序訪問。

因爲排序似乎沒有更新DefaultTableModel。

正確,只更新視圖(JTable)。

如果您想要直接搜索TableModel,那麼無論何時需要調用JTable方法(即選擇表格行),都需要將模型索引轉換爲視圖索引。這是通過使用以下JTable方法進行:

int columnColumn = table.convertColumnIndexToView(modelColumn); 
int row = table.convertRowIndexToView(modelRow); 

也有方法的視圖值轉換爲模型值。

+0

正是我在找什麼,解決了我所有的問題。 –