2010-11-12 121 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,不可见列的顺序不会被修改。