JTable行排序而不更改“Sl No”列

时间:2012-09-24 06:23:52

标签: java swing jtable comparator tablerowsorter

在我的JTable和其他列中,我有一个“序列号”列,它只是对表中的记录进行编号。我希望在通过单击JTable列标题对行进行排序时修复此列。排序正好发生,但“序列号”在这个过程中变得混乱。有什么方法可以保留“序列号”我对行进行排序时固定了哪个列?

感谢您的帮助。

示例:

SlNo名称
约翰一 2彼得
3阿列克

对此进行排序后(点击“名称”列),我得到了这个:

SlNo名称
3 Alek
约翰一 2彼得

但是,我希望结果为:

SlNo名称
1 Alek
约翰二 3彼得

2 个答案:

答案 0 :(得分:1)

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

查看Sorting and Filtering

<强>更新

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

默认实现只是将行/列值一起比较(getValueAt(row, column))这很好,但是没有为您提供任何上下文以便做出您需要做出的决定(即,哪一行是排序,行值可能是什么等等,实际上过滤器提供了更有价值的信息:P ...

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

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

答案 1 :(得分: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());