【发布时间】:2011-07-07 19:17:31
【问题描述】:
我有一个使用setAutoCreateRowSorter(true) 的JTable 和一个附加的RowSorterListener,如下所示,因为我需要在我的应用程序的其他地方对某种JTable 执行一些操作。
我发现每当我单击列标题进行排序时,JTable 都会以正确的顺序重新显示行并调用侦听器,但我拉出的 TableModel 始终是原始的预排序表模型。
table.getRowSorter().addRowSorterListener(new RowSorterListener() {
@Override
public void sorterChanged(RowSorterEvent rsevent) {
rsevent.getSource().getModel(); // Nope, original ordering here
table.getModel(); // Same thing
}
};
我如何获得行的新排序后排序,就像现在在 JTable 中显示的那样?
【问题讨论】:
-
如何在 JTable 中初始化 RowSorter?这是我在 DefaultRowSorter 上注意到的一条评论:“DefaultRowSorter 是一个抽象类。具体的子类必须通过调用 setModelWrapper 来提供对底层数据的访问。setModelWrapper 方法必须在调用构造函数后立即调用,最好是从子类的构造函数中调用。未定义的行为如果您使用 DefaultRowSorter 而不指定 ModelWrapper 将产生结果"
-
我认为您可以使用 table.convertRowIndexToModel(int ...),但是我认为有更好的解决方案。
-
除了
table.setAutoCreateRowSorter(true),我什么也没做。根据 Oracle 的 JTables 教程:“此操作定义了一个行排序器,它是 javax.swing.table.TableRowSorter 的一个实例。”所以我认为我根本不需要手动初始化它? -
@Lazy 如果您第二条评论中的方法有效,请发布作为答案!即使有“更好的解决方案”,所有有效的解决方案都应该是答案,“更好”可以通过投票来判断。