javaFX在tableview中显示日历值

时间:2014-10-06 21:03:02

标签: java calendar javafx tableview gregorian-calendar

我有以下问题。 我正在为学校做作业,我们需要在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

它继续这样下去。 对我有简单解决方案的人?我可能在这里错过了一些非常简单的东西。

1 个答案:

答案 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()));
        }
    }
});