MatlabでJIDEグリッドの並べ替えと自動フィルタ処理機能を使用しています。私はgetColumnClassをオーバーライドし、フィルタリングとソートはIntegers、Double、String Columns(数値の場合は数値で、文字列の場合はそれぞれ字句順にソートしています)ではうまくいきます。日付列のgetColumnClassが無効になっています
しかし、私はDateカラムの大きな問題に直面しています。私はgetColumnクラスをオーバーライドし、Date.classとして定義しました。しかし、フォーマットを理解して正しく動作させるために、日付(生データのように)をフィルタリングとソートに渡すフォーマットを定義しなければならないと思います。
JIDEオートフィルタのデフォルトの日付形式は'07 -Apr-2016 'です。私は同じフォーマットにデータを変換しようとしましたが、運はありません。日付をフィルタリングしようとすると、(Unknown Source)例外がスローされます。私はそれが私の日付形式を理解していないと思う。 Date列のクラスをオーバーライドするときの日付形式はどのように定義できますか?
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException:
java.util.Date cannot be cast to java.lang.String
at java.lang.String.compareTo(Unknown Source)
at com.jidesoft.filter.LessThanFilter.isValueFiltered(Unknown Source)
at com.jidesoft.grid.FilterableTableModel.shouldBeFiltered(Unknown Source)
ここは、DefaultTableModelを上書きするMy TableModelクラスです。
import javax.swing.table.*;
import java.util.Date;
class MyTableModel extends DefaultTableModel {
public MyTableModel(Object rowData[][], Object columnNames[]) {
super(rowData, columnNames);
}
@Override
public Class getColumnClass(int col) {
switch (col){
case 0:
return Integer.class;
case 1: case 2: case 9:
case 10: case 33:
return String.class;
case 3:
return Date.class;
default:
return Double.class;
}
}
@Override
public boolean isCellEditable(int row, int col) {
switch (col){
case 28: case 29: case 30: case 31: case 32:
return true;
default:
return false;
}
}
}
:
私は同じ問題を説明し、解決されることを後で見つかった別のスレッドを混乱させて申し訳ありませんが、私は形式がテキストで目立たせることが日付に引用符を追加しました。カスタムのTableRendererを使用して、日付、色などの外観を既に制御しています。あなたは、Dateオブジェクトではなく私のTableModelに日付文字列があることを指摘しています。私はそれをするために何らかの種類のFormatConverterを使用しなければならないと思う、私はプログラマーではない、申し訳ありませんが、それに関する助言は参考になります。ありがとう。 – Amit
@Amit、編集を参照してください。 – camickr
ありがとう、すべてうまくいきました。 – Amit