如果您想保留 TableColumn 的排序功能,上述解决方案均无效:如果您将 Date 转换为 String 并在 TableView 中以这种方式显示;该表将按原样对其进行排序(因此不正确)。
我找到的解决方案是继承 Date 类以覆盖 toString() 方法。不过这里有一个警告:TableView 使用 java.sql.Date 而不是 java.util.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"));
最后,为了清楚起见,这是您在对象类中声明 getter 的方式:
public CustomDate getMyDateAttr() {
return new CustomDate(myDateAttr.getTime()); //myDateAttr is a java.util.Date
}
由于它在幕后使用 java.sql.Date,我花了一段时间才弄清楚这一点;所以希望这可以为其他人节省一些时间!