我在给JTABLE排序的时候,发现完了但是发现VIEW和MODEL不一致,VIEW更新了,但是MODEL没有更新,不知道是怎么回事,请哪位大哥指点下,谢谢表格处理的一段代码:
  //MYTABLE的构造方法中初始化了DefaultTableModel dtm
   MyTable  mt = new MyTable();
 //加滚动条
   jsp = new JScrollPane(mt,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
//这段代码是初始化表格内容的,从EXCLE中查出来的数据
mt.addToTable(ExcleUtil.getExcle().getList());

jsp.setBounds(15, 260, 565, 240);
jsp.getViewport().add(mt);
mt.setFillsViewportHeight(true);
//排序使用的类
TableRowSorter<TableModel> ts = new TableRowSorter<TableModel>(mt.getDtm());

mt.setRowSorter(ts);
//表格的第0列是INDEX,整型,其他全为STRING
ts.setComparator(0, new Comparator<Integer>(){
public int compare(Integer o, Integer o2) {
return o-o2;
}
});

解决方案 »

  1.   

    事实上排序并没有移动model中的数据。排序只是更改数据显示的顺序。
    排序后在TableRowSorter 内部会有一个数组来指明view的一行对应于model中那一行。
    例如,为排序前,这个数组为[0,1,2]
    那么实际view显示为
    model的第0行
    model的第一行
    model的第二行
    排序后数组就可能变为[1,2,0].
    此时view显示为
    model的第一行
    model的第二行
    model的第0行
      

  2.   

    打个比方吧索引   姓名     年龄
    1     张三     23
    2     李四     43
    3     王无     13
    假如表格初始化就是这样。
    我点表头“索引”、“姓名”、“年龄”都会进行排序。点年龄(年龄大小排)排序时表格变成:
    索引   姓名     年龄
    1     李四     43
    2     张三     23
    3     王无     13
    但是我拿第一行(李四)的数据时,其实真正拿到的是初始化时的“张三”。
    也就是表的视图改变了,但是Model并没有一起改变。怎么解决
      

  3.   

    你点第一行你得到该行在veiw得顺序
    indexInView = 0;
    TableRowSorter有提供方法得到该行在model中的顺序
    indexInModel = ts.modelIndex(indexInView);