TableColumnの並べ替え機能を保持したい場合は、上記の解決策はどれも有効ではありません。日付を文字列に変換し、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を使用しているため、これを理解するのに少し時間がかかりました。うまくいけば、これは他の人の時間を節約するでしょう!