拖动Jtable中的列后列索引不会更改

kir*_*ran 3 java swing jtable

我正在使用JTable来显示信息.如果我拖动列以重新排序它们之后呈现信息,则会话中的信息以相同的方式显示.但是当我尝试通过迭代列名来检查列名来捕获更改时,序列与旧列相同.为什么API无法提供最新视图?

Bar*_*end 8

正如Hovercraft Full Of Eels评论的那样,视图中的列索引独立于模型中的列索引而变化.JTableJavaDoc对此有这样的说法:

默认情况下,可以重新排列列,JTable以便视图的列以与模型中的列不同的顺序显示.这根本不会影响模型的实现:当列重新排序时,在JTable内部维护列的新顺序并在查询模型之前转换其列索引.

JTable提供了方法convertColumnIndexToModel(),并convertColumnIndexToView()可以使用列编号从一个到另一个翻译.您可以使用它们来确定是否(以及如何)重新排列列.

要在列发生更改时收到通知,请使用TableColumnModelListener:

myTable.getColumnModel().addColumnModelListener( new TableColumnModelListener() {
    //etc.
} );
Run Code Online (Sandbox Code Playgroud)