2016-04-01 27 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

[コンセプト:編集者とレンダラー](http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#editrender)と[カスタムレンダラーの使用](http: //docs.oracle.com/javase/tutorial/uiswing/components/table.html#renderer)この方法で、モデルに1つの値を設定し、ビューに対してレンダリングする方法を変更することができます – MadProgrammer

+2

私は[テーブルの使い方、並べ替えとフィルタリング](http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#sorting)を参照してください。例えば、あなたが並べ替えることができ、カスタムソーターを使ってこのように列を並べ替えることができる値 – 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; 
    } 
} 

のために少しの例あなたは、enum定数でモデル内の文字列の値を置き換えることができます。メソッドtoStringを使用すると、正しい文字列を表に表示できます。整数値が比較に使用されます(定数が正しい順序である場合は暗黙的に必要とされません)。