Javafx 2 以当前格式从TableCell检索数据

Javafx 2 以当前格式从TableCell检索数据,javafx-2,tableview,Javafx 2,Tableview,在我的TableView中有一个DateTime列,它以所选的不同格式显示。我已经为此实现了一个定制的cellfactory。现在我正试图将表数据导出到一个文件中 我的问题是DateTime列采用UTC格式,而不是tablecell中显示的内容 如何从屏幕上显示的tablecell中获取准确的字符串?简单的回答是,您不能(至少,如果没有一些难看的黑客,就不能)。您可能希望保存表中所有行的数据,但不能保证表中所有行都有TableCell(在大多数情况下,不会有) 您真正想要做的是在TableCel

在我的TableView中有一个DateTime列,它以所选的不同格式显示。我已经为此实现了一个定制的cellfactory。现在我正试图将表数据导出到一个文件中

我的问题是DateTime列采用UTC格式,而不是tablecell中显示的内容


如何从屏幕上显示的tablecell中获取准确的字符串?

简单的回答是,您不能(至少,如果没有一些难看的黑客,就不能)。您可能希望保存表中所有行的数据,但不能保证表中所有行都有TableCell(在大多数情况下,不会有)

您真正想要做的是在TableCell和“保存到文件”功能之间共享格式化功能。只需重构单元工厂,将格式化代码移动到某个方法中,然后在保存到文件时调用您的方法

例如

private String formatDateTime(DateTime-DateTime){
// ...
}
dateTimeCol.setCellFactory(新回调(){
@凌驾
公共TableCell调用(TableColumn列){
返回新的TableCell(){
@凌驾
public void updateItem(DateTime DateTime,布尔值为空){
if(空){
setText(“”);
}否则{
setText(formatDateTime(dateTime));
}
}
};
}
});
私有void saveToFile(){
对于(MyDataType数据:table.getItems()){
DateTime DateTime=data.getDateTime();
字符串formattedDateTime=FormattDateTime(日期时间);
//输出数据。。。
}
}

是的@James\u你说得对。我通过将excel单元格格式更改为date并将值设置为java.util.date来实现这一点。阿帕奇·波伊来帮忙。
private String formatDateTime(DateTime dateTime) {
    // ...
}

dateTimeCol.setCellFactory(new Callback<TableColumn<MyDataType, DateTime>, TableCell<MyDateType, DateTime>>() {
    @Override
    public TableCell<MyDataType, DateTime> call(TableColumn<MyDataType, DateTime> col) {
        return new TableCell<>() {
            @Override
            public void updateItem(DateTime dateTime, boolean empty) {
                 if (empty) {
                     setText("");
                 } else {
                     setText(formatDateTime(dateTime));
                 }
            }
        };
    }
});

private void saveToFile() {
    for (MyDataType data : table.getItems()) {
         DateTime dateTime = data.getDateTime();
         String formattedDateTime = formatDateTime(dateTime);
         // output data...
    }
}