簡體   English   中英

排序器更改行順序后如何更新JTableModel?

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

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