【发布时间】:2011-12-20 16:40:09
【问题描述】:
我正在使用 JTable 来显示信息。如果我拖动列对它们重新排序,则在呈现信息后,信息会在会话中以相同的方式显示。但是,当我尝试通过迭代列名来检查列名来捕获更改时,顺序与旧的相同。为什么 API 中没有最新的视图?
【问题讨论】:
-
视图和模型完全不同。更改列的顺序不会影响模型。
我正在使用 JTable 来显示信息。如果我拖动列对它们重新排序,则在呈现信息后,信息会在会话中以相同的方式显示。但是,当我尝试通过迭代列名来检查列名来捕获更改时,顺序与旧的相同。为什么 API 中没有最新的视图?
【问题讨论】:
正如 Hovercraft Full Of Eels 所评论的,视图中的列索引的变化与模型中的列索引无关。 JTable's JavaDoc 有话要说:
默认情况下,
JTable中的列可能会重新排列,以便视图的列以与模型中的列不同的顺序出现。这根本不影响模型的实现:当列重新排序时,JTable在内部维护列的新顺序并在查询模型之前转换其列索引。
JTable 提供了convertColumnIndexToModel() 和convertColumnIndexToView() 方法,您可以使用它们将列号从一个转换为另一个。您可以使用这些来确定列是否(以及如何)重新排列。
要在发生列更改时收到通知,请使用TableColumnModelListener:
myTable.getColumnModel().addColumnModelListener( new TableColumnModelListener() {
//etc.
} );
【讨论】: