有没有办法让 TableView 中的列显示正确的日期,而不是:
java.util.GregorianCalendar[time=?areFieldsSet=false...
我想知道,因为在我拥有的 Date 列上显示它很烦人,并且必须在 Date 和 GregorianCalendar 之间切换会变得混乱和烦人。
有没有办法让 TableView 中的列显示正确的日期,而不是:
java.util.GregorianCalendar[time=?areFieldsSet=false...
我想知道,因为在我拥有的 Date 列上显示它很烦人,并且必须在 Date 和 GregorianCalendar 之间切换会变得混乱和烦人。
首先,我强烈建议使用java.time
API,而不是像java.util.Calendar
andjava.util.Date
等遗留类。
在任何情况下,您都可以通过使用列上的单元格工厂来更改给定列中单元格中数据的显示方式。如果您的单元格值工厂正在生成Calendar
实例,您可能有
TableColumn<MyTableType, Calendar> dateColumn ;
// ...
dateColumn.setCellValueFactory(...);
你还可以做
DateFormat dateFormat = DateFormat.getDateInstance();
dateColumn.setCellFactory(col -> new TableCell<MyTableType, Calendar>() {
@Override
protected void updateItem(Calendar date, boolean empty) {
super.updateItem(date, empty);
if (empty) {
setText(null);
} else {
setText(dateFormat.format(date.getTime()));
}
}
});
如果您使用上述java.time
API,则表示日期LocalDate
并使用 aDateTimeFormatter
进行格式化:
TableColumn<MyTableType, LocalDate> dateColumn ;
// ...
dateColumn.setCellValueFactory(...);
DateTimeFormatter dateFormat = DateTimeFormatter.ISO_LOCAL_DATE;
dateColumn.setCellFactory(col -> new TableCell<MyTableType, LocalDate>() {
@Override
protected void updateItem(LocalDate date, boolean empty) {
super.updateItem(date, empty);
if (empty) {
setText(null);
} else {
setText(dateFormat.format(date));
}
}
});