TableColumnのソート機能を保持する場合は、上記のいずれのソリューションも有効ではありません。DateをStringに変換してTableViewに表示すると、テーブルはそのように(誤って)ソートします。
私が見つけた解決策は、toString()メソッドをオーバーライドするために、Dateクラスをサブクラス化することでした。ただし、ここでは注意が必要です。TableViewはjava.util.Dateではなくjava.sql.Dateを使用します。前者をサブクラス化する必要があります。
import java.text.SimpleDateFormat;
public class CustomDate extends java.sql.Date {
public CustomDate(long date) {
super(date);
}
@Override
public String toString() {
return new SimpleDateFormat("dd/MM/yyyy").format(this);
}
}
テーブルは、このメソッドを呼び出して日付を印刷します。
もちろん、あなたが新しいサブクラスにTableColumnの宣言でもあなたのDateクラスを変更する必要があります:あなたはあなたのテーブルの列に、オブジェクトの属性を付ける
@FXML
TableColumn<MyObject, CustomDate> myDateColumn;
同じこと:
myDateColumn.setCellValueFactory(new PropertyValueFactory< MyObject, CustomDate>("myDateAttr"));
を
そして最後に、明確さの揺れのために、これはあなたがオブジェクトクラスにゲッターを宣言する方法です:
public CustomDate getMyDateAttr() {
return new CustomDate(myDateAttr.getTime()); //myDateAttr is a java.util.Date
}
これは、舞台裏でjava.sql.Dateを使用しているため、これを把握するのに時間がかかりました。だからうまくいけば、これは他の人にしばらく時間を節約しますJava FX8のため
これは、モデルの日付プロパティがSimpleStringPropertyより遅く変更され、通知が発行されず、テーブルが更新されない場合に、テーブルの初期設定に適しています。 – Adam