问题:
   单击某列表头排序。并且以当前单击列为第一优先条件,第二列为为第二优先排序条件排序,有谁做过么

解决方案 »

  1.   

     1 , 2 , 3点击第2列 时    2 ,1 ,3 是这样的优先级?拿SQL拼接应该可以做出来  
      

  2.   

    有点小难,建议看下JDK的代码,然后重写那个点击列头排序的方法。
      

  3.   

    问题是不能用sql语句,要是用sql语句就好办了 汗~
      

  4.   

    JTable中有个setAutoCreateRowSorter,能排序一行的
    你可以重写一下
      

  5.   

    JTable jt=new JTable(yourTableModel);
    jt.setRowSorter(new TableRowSorter(myModel));
    不过要注意每列的数据类型为那些实现了comparable接口的数据类型,如果是自定义的类,则你须实现comparable接口的子接口comparator并将其注册到表格的列排序器中:
    public void setComparator(int column, Comparator<?> comparator)//DefaultRowSorter的方法。
    完成这些工作后你就可以拥有表格排序的功能了。
      

  6.   

    代码参考 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;
    }
            }
        }