Java 按特定顺序对包含字符串的JTable列进行排序

Java 按特定顺序对包含字符串的JTable列进行排序,java,swing,sorting,Java,Swing,Sorting,我有一个JTable,包含6列不同的值。 其中一列称为“优先级”,包含不同的字符串: ("Critical", "High", "Medium", "Low", "Not a priority"). 默认排序是按字母顺序排列的,不适用于我希望从低到高或相反顺序列出优先级的情况 我一直在研究比较器和枚举,但还没有弄清楚如何使其工作 也使用此模型: public class TableModel extends DefaultTableModel{ final Class<?

我有一个
JTable
,包含6列不同的值。 其中一列称为“
优先级”
,包含不同的字符串:

 ("Critical", "High", "Medium", "Low", "Not a priority"). 
默认排序是按字母顺序排列的,不适用于我希望从低到高或相反顺序列出优先级的情况

我一直在研究比较器和枚举,但还没有弄清楚如何使其工作

也使用此模型:

public class TableModel extends DefaultTableModel{ 
     final Class<?>[] columnClasses = new Class<?>[] {Integer.class, String.class, Date.class, String.class, String.class, String.class}; 
     @Override 
     public Class<?> getColumnClass(int columnIndex) { 
           return columnClasses[columnIndex]; 
     }
}
公共类TableModel扩展了DefaultTableModel{
最终类[]columnClasses=新类[]{Integer.Class,String.Class,Date.Class,String.Class,String.Class,String.Class};
@凌驾
公共类getColumnClass(int columnIndex){
返回columnClasses[columnIndex];
}
}

这使我能够自动按升序和降序对日期和整数进行排序。

比较器和枚举的一个小示例

public enum Priority implements Comparable<Priority> {
    CRITICAL("Critical", 10), HIGH("High", 8), MEDIUM("Medium", 5), LOW("Low", 3), NONE("Not a priority", 0);
    String title;
    int value;

    public Priority(String aTitle, int aValue) {
        title = aTitle;
        value = aValue;
    }
    public int compareTo(Priority another) {
        return Integer.valueOf(value).compareTo(Integer.valueOf(another.value));
    }
    public String toString() {
        return title;
    }
}
公共枚举优先级实现可比较{
关键(“关键”,10)、高(“高”,8)、中(“中”,5)、低(“低”,3)、无(“非优先”,0);
字符串标题;
int值;
公共优先级(字符串aTitle、int aValue){
title=aTitle;
价值=价值;
}
公共整数比较(其他优先级){
返回Integer.valueOf(value.compareTo(Integer.valueOf(另一个.value));
}
公共字符串toString(){
返回标题;
}
}

可以用枚举常量替换模型中的字符串值。方法
toString
允许在表中显示正确的字符串。整数值用于比较(当常量的顺序正确时,它不是隐式要求的)。

比较器和枚举的一个小示例

public enum Priority implements Comparable<Priority> {
    CRITICAL("Critical", 10), HIGH("High", 8), MEDIUM("Medium", 5), LOW("Low", 3), NONE("Not a priority", 0);
    String title;
    int value;

    public Priority(String aTitle, int aValue) {
        title = aTitle;
        value = aValue;
    }
    public int compareTo(Priority another) {
        return Integer.valueOf(value).compareTo(Integer.valueOf(another.value));
    }
    public String toString() {
        return title;
    }
}
公共枚举优先级实现可比较{
关键(“关键”,10)、高(“高”,8)、中(“中”,5)、低(“低”,3)、无(“非优先”,0);
字符串标题;
int值;
公共优先级(字符串aTitle、int aValue){
title=aTitle;
价值=价值;
}
公共整数比较(其他优先级){
返回Integer.valueOf(value.compareTo(Integer.valueOf(另一个.value));
}
公共字符串toString(){
返回标题;
}
}
可以用枚举常量替换模型中的字符串值。方法
toString
允许在表中显示正确的字符串。整数值用于比较(当常量的顺序正确时,它不是隐式要求的)。

首先查看,这样您可以在模型中有一个值,并对视图进行不同的渲染。我还可以更仔细地查看,例如,使用一个
enum
,它保存一个值,您可以根据该值进行排序,并使用一个自定义排序器对列进行排序。首先,您可以查看模型中的一个值,然后对视图进行不同的渲染。我还可以更仔细地查看,例如,使用一个
enum
,它保存一个可以排序的值,并使用自定义排序器以这种方式对列进行排序