如果要保留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"));
最後,爲了清楚的震動,這是如何在你的對象類中聲明,吸氣:
public CustomDate getMyDateAttr() {
return new CustomDate(myDateAttr.getTime()); //myDateAttr is a java.util.Date
}
我花了一段時間才弄清楚這一點,因爲它在幕後使用了java.sql.Date;所以希望這會節省其他人一些時間!
這工作正常最初填充表...如果在模型中的日期屬性改變比SimpleStringProperty後不發出通知,而不是更新的表。 – Adam 2015-09-01 10:28:12