これに関連してかなりの質問がありましたが、私の問題には簡単な解決策が見つかりませんでした。JTableで二重値をソートする
JTableがDouble値を正しくソートする方法が見つかりません。
私はクラスの配列を受け取り、列ごとに適切なタイプを返すためにAbstractTableModelに拡張:
TableRowSorter<TableModelMod> sorter = new TableRowSorter<TableModelMod>((TableModelMod)getModel());
しかし、追加したとき、私はこのエラーを取得する:私のカスタムJTableのコンストラクタで
class TableModelMod extends AbstractTableModel{
private ArrayList data;
private String [] headers;
private Class [] types;
TableModelMod(String [] heads, ArrayList datas, Class [] classes){
headers = heads;
data = datas;
types = classes;
}
...
@Override public Class getColumnClass(int c){
if (c > types.length - 1)
return null;
else
return types[c];
}
...
そしてを行:
java.lang.IllegalArgumentException: Cannot format given Object as a Number
この方法では失敗しますDecimalFormat.format(Object number, StringBuffer toAppendTo, FieldPosition pos)
ほとんどの数値型を受け取りますが、Doubleを受け取ります。
Double列に別のクラスを使用すると、エラーは発生しませんが、ソートは期待通りに機能しません。私は別の数値クラスで試してみましたが、どれもダブルス正しく並べ替えるように見えるん:
@Override public Class getColumnClass(int c){
if (c > types.length - 1)
return null;
else if (types[c] == Double.class)
return Number.class;
else
return types[c];
}
私は私が必要なものを私はカスタムのRowSorter、カスタムのCellRenderer、またはその両方を実装することであるかはわかりません。
これを簡単な方法で修正する方法を教えてもらえますか?
ありがとう、ありがとうございます。 EDITED
:それは問題があった場所伝えることは非常に恥ずかしいです
を解決しました。
Object []行を含むArrayListは、getObject(int)またはgetDouble(int)ではなくgetString(int)を使用してデータベースResultSetから塗りつぶされていたため、レンダラーによって値をDoubleとして使用できませんでした。それは、それが整数や数値を列クラスとして使用して例外を与えていない奇妙だが、それはとにかく文字列としてソートされていた。間違ったクラスの問題を探していたのは、私のArrayListにオブジェクトだけが含まれていると確信していたからです。
私のダブルスが実際にストリングスであることに気がついたので、あなたのサンプルを見ていただき、ありがとうございました。
を掲載することを切り取りません。 – murgatroid99