我在给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;
}
});
//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;
}
});
解决方案 »
- 在帖子上看到了一个小程序,不解???
- JAVA中如何将获得的InputStream 写入到一个文件里呢?
- myeclipse连接数据库程序(mysql)
- PageLM是什么意思啊
- long转换成byte[]后,长度一定是8而无法做到4吗?因为数据库表里有个binary类型的字段长度只有4,转换后的数据存不进去。
- 关于System.arraycopy()方法的一个发现,不知道各位是否认可,或是偶的理解有误也肯请帮忙指正
- 怎样判断字符串中含有汉字?
- applet怎样给客户端(打开web的计算机)授权???(然后读写文件)
- 各位大虾看过来********************
- java正则表达式一些疑惑
- File f = new File("d") 和 File(directory, "f")问题
- 帮我看看这个程序的结果
排序后在TableRowSorter 内部会有一个数组来指明view的一行对应于model中那一行。
例如,为排序前,这个数组为[0,1,2]
那么实际view显示为
model的第0行
model的第一行
model的第二行
排序后数组就可能变为[1,2,0].
此时view显示为
model的第一行
model的第二行
model的第0行
1 张三 23
2 李四 43
3 王无 13
假如表格初始化就是这样。
我点表头“索引”、“姓名”、“年龄”都会进行排序。点年龄(年龄大小排)排序时表格变成:
索引 姓名 年龄
1 李四 43
2 张三 23
3 王无 13
但是我拿第一行(李四)的数据时,其实真正拿到的是初始化时的“张三”。
也就是表的视图改变了,但是Model并没有一起改变。怎么解决
indexInView = 0;
TableRowSorter有提供方法得到该行在model中的顺序
indexInModel = ts.modelIndex(indexInView);