我有以下问题。
我正在为学校分配作业,我们需要在表格视图中显示gregoriancalendar值。
这是我的桌子代码

TableColumn geboortedatum = new TableColumn("Geboortedatum");
    geboortedatum.setCellValueFactory(new PropertyValueFactory<Persoon, SimpleDateFormat>("gebDat"));


当我实际运行它时,无论如何我都会在表视图中获得以下值。

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


这样下去
有谁对我有一个简单的解决方案?我可能在这里错过了一些非常简单的事情。

最佳答案

首先,看起来您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()));
        }
    }
});

07-28 02:59
查看更多