在我的JTable
和其他列中,我有一个“序列号”列,它只是对表中的记录进行编号。我希望在通过单击JTable
列标题对行进行排序时修复此列。排序正好发生,但“序列号”在这个过程中变得混乱。有什么方法可以保留“序列号”我对行进行排序时固定了哪个列?
感谢您的帮助。
示例:
SlNo名称
约翰一
2彼得
3阿列克
对此进行排序后(点击“名称”列),我得到了这个:
SlNo名称
3 Alek
约翰一
2彼得
但是,我希望结果为:
SlNo名称
1 Alek
约翰二
3彼得
答案 0 :(得分:1)
您是否尝试过实施自己的TableRowSorter?
<强>更新强>
我一直在挖掘代码检查这个。这是可行的,但你将不得不重新发明轮子才能让它发挥作用。
默认实现只是将行/列值一起比较(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());