2010-11-12 122 views
4

我有一些列的JTable。我必須映射到視圖中的位置的列標識符的一個HashMap,例如:在JTable中設置列的順序

TableHeader1 | TableHeader2 | TableHeader3 
    sth.   sth.   sth. 

我知道:

TableHeader1 -> position 0 
TableHeader2 -> position 1 
TableHeader3 -> position 2 

現在我要重新排序的列。我知道在JTable類中有一個名爲moveColumn(A,B)的函數。這將列從A移動到B,並且B向左或向右移動。 我的問題是,我想以特定的方式排列整個表格,我該怎麼做? 如果我使用moveColumn,我不知道B在哪裏移動,在10個情況中有5個可能是右側,在其他情況下是錯誤的一側。

希望你能理解我的問題:-)

回答

7

您可以通過刪除所有這些,以正確的順序將它們更改列順序:

public static void setColumnOrder(int[] indices, TableColumnModel columnModel) { 
    TableColumn column[] = new TableColumn[indices.length]; 

    for (int i = 0; i < column.length; i++) { 
     column[i] = columnModel.getColumn(indices[i]); 
    } 

    while (columnModel.getColumnCount() > 0) { 
     columnModel.removeColumn(columnModel.getColumn(0)); 
    } 

    for (int i = 0; i < column.length; i++) { 
     columnModel.addColumn(column[i]); 
    } 
} 
1

OK這個怎麼樣。可能會有點左場。

擴展TableColumn並給你的新課程一個position屬性。讓它執行Comparable並使用position來比較列。

接下來,擴展DefaultTableColumnModel並將TableColumn存儲在有序列表中。

您的JTable現在應該根據它們的position顯示列。未經測試,但聽起來很有意思,所以我可能會在稍後再說。

1

基於@Guillaume答案我找到了一種方法來做到這一點,而無需刪除所有列並重新添加它們。

public static void setColumnOrder(int[] indices, JTable table, TableColumnModel columnModel) { 

    for (int i = 0; i < indices.length; i++) { 
     columnModel.moveColumn(i, table.convertColumnIndexToView(indices[i])); 
    } 
    } 

這對我更好,因爲使用(SwingX)JXTable,不可見列的順序不會被修改。