2014-10-06 113 views
0

我有以下問題。 我正在爲學校做作業,我們需要在tableview中顯示gregoriancalendar的值。 這是我的表javaFX在tableview中顯示日曆值

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 

它就這樣下去。 任何對我有簡單解決方案的人?我可能在這裏錯過了一些很容易的事情。

回答

2

首先,它看起來有PropertyValueFactory的錯誤類型。由於您使用的是原始碼TableColumn,因此您可以避開此問題,但如果您正確鍵入列,代碼將更易於理解。從輸出中,我可以看到您的Persoon.getGebDat()方法返回Calendar對象。所以,你應該有

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

一個TableCell的默認行爲是調用它顯示的是該項目的toString方法。您看到的文字是在Calendar對象上調用toString的結果。

要更改數據的顯示方式,您需要在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())); 
     } 
    } 
}); 
+0

感謝現在它完美的作品! – NoSixties 2014-10-07 07:03:37