我有以下问题。 我正在为学校做作业,我们需要在tableview中显示gregoriancalendar值。 这是我的表格代码
TableColumn geboortedatum = new TableColumn("Geboortedatum");
geboortedatum.setCellValueFactory(new PropertyValueFactory<Persoon, SimpleDateFormat>("gebDat"));
当我实际运行此操作时,无论如何,我都会在tableview中获得以下值。
java.util.GregorianCalendar[time=-23574157200000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Europe/Berlin",offset=3600000,dstSavings=3600000,useDaylight=true,transitions=143,lastRule=java.util.SimpleTimeZone[id=Europe/Berlin,offset=3600000,dstSavings=3600000,useDaylight=true,startyear=0,startMode=2,startMonth=2,startDay=-1,startTime=360000
它继续这样下去。 对我有简单解决方案的人?我可能在这里错过了一些非常简单的东西。
答案 0 :(得分:2)
首先,它看起来PropertyValueFactory
的类型错误。您可以使用原始TableColumn
,因为如果您正确键入列,您的代码将更容易理解。从输出中,我可以看到您的Persoon.getGebDat()
方法返回Calendar
个对象。所以你应该
TableColumn<Persoon, Calendar> geboortedatum = new TableColumn<>("Geboortedatum");
geboortedatum.setCellValueFactory(new PropertyValueFactory<Persoon, Calendar>("gebDat"));
TableCell
的默认行为是调用它正在显示的项目的toString
方法。您看到的文字是在toString
对象上调用Calendar
的结果。
要更改数据的显示方式,您需要在TableColumn
上指定一个单元格工厂,创建一个知道如何根据需要设置TableCell
格式的Calendar
。
所以你会做类似
的事情final DateFormat dateFormat = DateFormat.getDateInstance() ; // or whatever format object you need...
geboortedatum.setCellFactory(col -> new TableCell<Persoon, Calendar>() {
@Override
public void updateItem(Calendar item, boolean empty) {
super.updateItem(item, empty);
if (item == null) {
setText(null);
} else {
setText(dateFormat.format(item.getTime()));
}
}
});