2016-04-01 190 views
0

我有一个JTable,其中包含6列不同的值。 其中一列被称为“Priority”,包含不同的字符串:按特定顺序排序包含字符串的JTable列

("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]; 
    } 
} 

这已经让我自动升序和降序的日期和整数排序。

+1

首先查看[Concepts:Editors and Renderers](http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#editrender)和[Using Custom Renderers](http: //docs.oracle.com/javase/tutorial/uiswing/components/table.html#renderer),这样你可以在模型中有一个值,并且对于视图有不同的渲染器 – MadProgrammer

+2

我也可以看看[如何更密切地使用表格,排序和过滤](http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#sorting),例如,您可以使用一个'enum'一个值,您可以通过这种方式对列进行排序并使用自定义排序器进行排序 – MadProgrammer

回答

2

的比较和枚举

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; 
    } 
} 

您可以通过枚举常量替换模型中的字符串值,一个小例子。方法toString允许在表格中显示正确的字符串。整数值用于比较(当常量的顺序正确时,并不是隐含的)。

相关问题