jtable 多列排序 问题: 单击某列表头排序。并且以当前单击列为第一优先条件,第二列为为第二优先排序条件排序,有谁做过么 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1 , 2 , 3点击第2列 时 2 ,1 ,3 是这样的优先级?拿SQL拼接应该可以做出来 有点小难,建议看下JDK的代码,然后重写那个点击列头排序的方法。 问题是不能用sql语句,要是用sql语句就好办了 汗~ JTable中有个setAutoCreateRowSorter,能排序一行的你可以重写一下 JTable jt=new JTable(yourTableModel);jt.setRowSorter(new TableRowSorter(myModel));不过要注意每列的数据类型为那些实现了comparable接口的数据类型,如果是自定义的类,则你须实现comparable接口的子接口comparator并将其注册到表格的列排序器中:public void setComparator(int column, Comparator<?> comparator)//DefaultRowSorter的方法。完成这些工作后你就可以拥有表格排序的功能了。 代码参考 jdk/src.zip/javax/swing/table/TableRowSorter.java在TableRowSorterModelWrapper中 getStringValueAt函数里面,把要比较的多列值连接起来,我是用//连接 Object o = getValueAt(row, column);//这行后面取其它列的值 if(column == 2) o = o.toString() + "//" +getValueAt(row, 3);在getComparator函数里面, 如果列数是你要排序的列时, 调用自己的 MY_COMPARABLE_COMPARATOR我的是第2列 if(column == 2) return MY_COMPARABLE_COMPARATOR;在开始定义 private static final Comparator MY_COMPARABLE_COMPARATOR = new MyComparableComparator();在自己的 MyComparableComparator函数里面 ,把连接起来的字符串拆开, 比较. private static class MyComparableComparator implements Comparator { @SuppressWarnings("unchecked") //public int compare(Object o1, Object o2) { // return ((Comparable)o1).compareTo(o2); //} public int compare(Object obj1,Object obj2){ String[] s1 = obj1.toString().split("//"); String[] s2 = obj2.toString().split("//"); int flag=s1[0].compareTo(s2[0]); if(flag==0){ return 0-s1[1].compareTo(s2[1]); }else{ return flag; } } } 请教下byte和char的这2个为什么是相等的 程序在Myeclipse中可以运行,打包后不能运行,cmd下也不能运行,这是怎么回事儿啊? 绘制后,如何得到绘制的大小 帮忙解答一个算法的问题 关于java API中Calendar的问题 tomcat链接池自动提交的问题? 为什么没有进行碰撞检测? 请高手帮忙,请教几个正则表达式的写法??? 请问wmv格式的文件怎么打开?!(视频) java开发的窗体中改变窗体大小时会触发什么事件及如何根据窗体大小调整控件大小、位置 JPanel的背景能不能动态的改变啊 怎么动态调整画布大小。
你可以重写一下
jt.setRowSorter(new TableRowSorter(myModel));
不过要注意每列的数据类型为那些实现了comparable接口的数据类型,如果是自定义的类,则你须实现comparable接口的子接口comparator并将其注册到表格的列排序器中:
public void setComparator(int column, Comparator<?> comparator)//DefaultRowSorter的方法。
完成这些工作后你就可以拥有表格排序的功能了。
把要比较的多列值连接起来,我是用//连接
Object o = getValueAt(row, column);//这行后面取其它列的值 if(column == 2)
o = o.toString() + "//" +getValueAt(row, 3);
在getComparator函数里面, 如果列数是你要排序的列时, 调用自己的 MY_COMPARABLE_COMPARATOR
我的是第2列 if(column == 2) return MY_COMPARABLE_COMPARATOR;在开始定义
private static final Comparator MY_COMPARABLE_COMPARATOR =
new MyComparableComparator();
在自己的 MyComparableComparator函数里面 ,把连接起来的字符串拆开, 比较.
private static class MyComparableComparator implements Comparator {
@SuppressWarnings("unchecked")
//public int compare(Object o1, Object o2) {
// return ((Comparable)o1).compareTo(o2);
//}
public int compare(Object obj1,Object obj2){
String[] s1 = obj1.toString().split("//");
String[] s2 = obj2.toString().split("//");
int flag=s1[0].compareTo(s2[0]);
if(flag==0){
return 0-s1[1].compareTo(s2[1]);
}else{
return flag;
}
}
}