[英]How to update JTableModel after the sorter has changed the rows order?
我實現了一個JTable,可以在其上搜索帶有textField的條目。
發出請求時,我的代碼獲取DefaultTableModel
,在每一列和每一行中查找元素,然后將表中的選擇設置為找到該元素的行。
這行得通,但是如果我通過單擊任何列對表進行排序就沒有用,因為排序似乎沒有更新DefaultTableModel
。
該表是一個更大的項目的一部分,該項目非常復雜並且充滿依賴性,因此我無法張貼一個小例子,但是我認為這可以總結一下:
給定一個DefaultTableModel A
,其中B.setAutoCreateRowSorter()
有關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
有人可以指出我正確的方向嗎?
發出請求時,我的代碼獲取DefaultTableModel,在每一列和每一行中查找元素...
因此,請勿搜索TableModel。 您可以使用table.getValueAt(...)方法在表的每一行/列中搜索元素。 將按照表的當前排序順序訪問數據。
因為排序似乎並沒有更新DefaultTableModel。
正確,只有視圖(JTable)被更新。
如果要繼續直接搜索TableModel,則無論何時要調用JTable方法(即選擇表行),都需要將模型索引轉換為視圖索引。 這是通過使用以下JTable
方法完成的:
int columnColumn = table.convertColumnIndexToView(modelColumn);
int row = table.convertRowIndexToView(modelRow);
還有一些方法可以將視圖值轉換為模型值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.