JavaFx:格式化表列数据

时间:2016-03-20 07:43:34

标签: java model-view-controller javafx

这是我第一次使用JavaFx,我只是作为模板使用本教程:http://code.makery.ch/library/javafx-8-tutorial/part3/

对于我的申请,我使用左侧的2列,电话号码和通话开始日期/时间。我想改变表格中数据的格式,因为它目前正在以yyyy-MM-ddThh:mm为基础。

我似乎无法弄清楚格式化文件的放置位置。我有一个日期格式化程序功能,你可以在上面的链接找到,但它返回一个字符串,它给我错误。谢谢你提供的所有帮助。以下是我正在使用的代码片段。

控制器:

    @FXML
private void initialize() {
    // Initialize the person table with the two columns.
    billingNumberColumn.setCellValueFactory(cellData -> cellData.getValue().billingNumberProperty());
    callStartColumn.setCellValueFactory(cellData -> cellData.getValue().callStartProperty());
}

型号:

public LocalDateTime getCallStart() {
    return callStart.get();
}

public void setCallStart(LocalDateTime callStart) {
    this.callStart.set(callStart);
}

public ObjectProperty<LocalDateTime> callStartProperty() {
    return callStart;
}

日期格式:

public static String format(ObjectProperty<LocalDateTime> callStart) {
    if (callStart == null) {
        return null;
    }
    return DATE_FORMATTER.format((TemporalAccessor) callStart);
}

2 个答案:

答案 0 :(得分:3)

使用cellFactoryTextFieldTableCell提供了一种在给定转换器的情况下创建单元工厂的方法。作为转换器,可以使用LocalDateTimeStringConverter

callStartColumn.setCellValueFactory(cellData -> cellData.getValue().callStartProperty());
callStartColumn.setCellFactory(TextFieldTableCell.forTableColumn(new LocalDateTimeStringConverter(DATE_FORMATTER, DATE_FORMATTER)));

答案 1 :(得分:0)

指定列

TableColumn<Person, LocalDateTime> column = new TableColumn<>("Birth");

此代码相当复杂,看起来并不是很好。

确保在空格中没有数据的情况下处理空案例或处理/ null

  column.setCellFactory(
                new Callback<TableColumn<Person, LocalDateTime>, TableCell<Person, LocalDateTime>>() {

                    @Override
                    public TableCell<Person, LocalDateTime> call(TableColumn<Person, LocalDateTime> param
                    ) {
                        return new TableCell<Person, LocalDateTime>() {

                            @Override
                            protected void updateItem(LocalDateTime item, boolean empty) {
                                super.updateItem(item, empty); 
                                if (item == null || empty) {
                                    setText(null);
                                    setStyle("");
                                } else {
                                    //FORMAT HERE AND CALL setText() with formatted date string



                                }
                            }

                        };
                    }
                }
        );