2012-09-24 42 views
0

在我的JTable的其他列中,我有一个“序列号”列,它只是对表中的记录进行编号。点击JTable列标题对行进行排序时,我希望修正此列。排序正在发生,但是“序列号”在这个过程中变得混乱起来。有什么方法可以保留“序列号”列固定,而我排序行?在不更改“Sl号”列的情况下排序的JTable行

感谢您的帮助。

例子:

SlNo名称
约翰
彼得
3阿列克

通过(点击 '名称' 列)排序在此之后,我得到这个:

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

不过,我想结果:

SlNo名称
1阿列克
约翰二
3彼得

+1

确保几乎所有的东西是可能的,但不知道该怎么做......,以便更快地发布[SSCCE](http://docs.oracle.com/javase/tutorial/uiswing/index。HTML)显示你的问题'RowSorter'的混合输出 – mKorbel

+0

不太明白:给出行与si == 0,1,2 ...排序后,你想发生的另一列是什么?保持原样(如从上到下的简单计数)或使其跳转到现在排序的行(如行标识符)?后者是默认的,前者略有不同寻常.. – kleopatra

+2

感谢您的澄清:-)你可能想看看http://tips4java.wordpress.com/2008/11/18/row-number-table/ – kleopatra

回答

1

您是否尝试实现自己的TableRowSorter

看一看Sorting and Filtering

UPDATE

我一直在周围挖了代码检查了这一点。这是可行的,但你将不得不重新发明轮子才能使它运作起来。

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

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

你留下的唯一的解决方案是实施你的解决方案从头开始(从RowSorter),能够为您提供所有t他需要的信息才能执行子组排序。如表模型,行和列的东西进行比较......

+3

嗯......这看起来有点像评论,是不是:-) – kleopatra

+0

@kleopatra它可以是如果你喜欢,没有时间看演示 – MadProgrammer

+0

@MadProgrammer(即使我upvoted),[看请点击这里(前两点)](http://stackoverflow.com/a/12583887/714968) – mKorbel

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()); 
相关问题