Nếu bạn muốn duy trì khả năng phân loại của TableColumn của bạn, không có giải pháp nào ở trên hợp lệ: nếu bạn chuyển ngày thành chuỗi và hiển thị theo cách đó trong TableView; bảng sẽ sắp xếp nó như vậy (không chính xác).
Giải pháp tôi tìm thấy là phân lớp lớp Ngày để ghi đè phương thức toString(). Tuy nhiên, có một báo trước ở đây: TableView sử dụng java.sql.Date thay vì java.util.Date; vì vậy bạn cần phải phân lớp trước đây.
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);
}
}
Bảng sẽ gọi phương thức đó để in ngày.
Tất nhiên, bạn cần phải thay đổi quá ngày lớp học của bạn trong việc kê khai TableColumn đến lớp con mới:
@FXML
TableColumn<MyObject, CustomDate> myDateColumn;
Cùng một điều khi bạn đính kèm thuộc tính đối tượng của bạn để cột của bảng của bạn:
myDateColumn.setCellValueFactory(new PropertyValueFactory< MyObject, CustomDate>("myDateAttr"));
Và cuối cùng, cho rung rõ ràng đây là cách bạn khai báo các getter trong lớp đối tượng của bạn:
public CustomDate getMyDateAttr() {
return new CustomDate(myDateAttr.getTime()); //myDateAttr is a java.util.Date
}
Tôi mất một thời gian để tìm ra điều này do thực tế là nó sử dụng java.sql.Date đằng sau hậu trường; vì vậy hy vọng điều này sẽ cứu người khác một thời gian!
Điều này hoạt động tốt khi ban đầu điền bảng ... nếu thuộc tính ngày trong mô hình thay đổi sau SimpleStringProperty không phát ra thông báo và bảng không được cập nhật. – Adam