2011-11-02 38 views
2

我正在使用JTable來顯示信息。在渲染信息後,如果我拖動列來對它們進行重新排序,則會話中的信息將以相同的方式顯示。但是當我嘗試通過迭代列名來檢查列名來捕獲更改時,序列與舊列相同。爲什麼API沒有提供最新的視圖?在Jtable中拖動列後列索引不會更改

+5

視圖和模型是完全不同的。改變列的順序不應該影響模型。 –

回答

7

正如Hovercraft Full Of Eels評論的那樣,視圖中的列索引獨立於模型中的列索引而改變。 JTable的JavaDoc中有這樣一段話吧:

默認情況下,列可以在JTable,使視圖的列會以不同的順序在模型中的列重新排列。這完全不影響模型的實現:當列重新排序時,JTable在內部維護列的新順序,並在查詢模型之前轉換其列索引。

JTable提供,您可以使用列編號從一個到另一個翻譯方法convertColumnIndexToModel()convertColumnIndexToView()。您可以使用這些來確定是否(以及如何)重新排列這些列。

要在列發生更改時收到通知,請使用TableColumnModelListener

myTable.getColumnModel().addColumnModelListener(new TableColumnModelListener() { 
    //etc. 
}); 
+0

在JDK 1.5中,是否有任何方式將視圖中的更改應用於模型? – kiran

+1

支持轉換列索引已經存在很長時間了。由於添加了排序/過濾支持,JDK6添加了對轉換行索引的支持。 – camickr

+0

我誤讀了。更新了答案。 – Barend