0

在我JTable的其他列中,我有一个“序列号”列,它只是对表中的记录进行编号。我希望在通过单击JTable列标题对行进行排序时修复此列。排序正常,但“序列号”在此过程中混淆了。有什么办法可以保留“序列号”吗?列在我对行进行排序时固定?

感谢您对此的帮助。

例子:

SlNo 姓名
1 约翰
2 彼得
3 亚历克

通过(单击“名称”列)对其进行排序后,我得到了这个:

SlNo 姓名
3亚历克
1 约翰
2 彼得

但是,我希望结果为:

SlNo 姓名
1亚历克
2 约翰
3 彼得

4

2 回答 2

1

您是否尝试过实现自己的TableRowSorter

看看排序和过滤

更新

我一直在挖掘代码来检查这一点。这是可行的,但你将不得不重新发明轮子才能让它发挥作用。

默认实现只是将行/列值一起比较getValueAt(row, column)(等),实际上过滤器提供了更多有价值的信息:P ...

你真正想要覆盖的方法是私有的......(DefaultRowSorter.compare),但我不确定它会以任何方式做你想要的......

您剩下的唯一解决方案是从头开始实施您的解决方案(从 开始RowSorter),它能够为您提供执行子组排序所需的所有信息。诸如表格模型,比较行和列之类的东西...

于 2012-09-24T06:32:16.853 回答
0

一个非常简单的实现是

public class siNo implements RowSorterListener {
    JTable table;
    public siNo(JTable table) {
        this.table = table;
    }

    @Override
    public void sorterChanged(RowSorterEvent e)
    {
        for (int i = 0; i < table.getRowCount(); i++) {
            table.setValueAt(Integer.toString(i+1), i, 0);
        }
    }
}

您的课程包含表格

sorter.setSortable(0, false);
sorter.addRowSorterListener(new siNo());
于 2016-01-15T13:04:03.583 回答