【问题标题】:JavaFx: Formatting Table Column DataJavaFx:格式化表列数据
【发布时间】:2016-03-20 07:43:34
【问题描述】:

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

对于我的应用程序,我使用左侧的 2 列、电话号码和通话开始日期/时间。我想更改表中数据的格式,因为它目前以yyyy-MM-ddThh:mm 的形式出现。

我似乎无法弄清楚将格式化部分放在哪里。我有一个日期格式化程序函数,您可以在上面的链接中找到它,但它返回一个字符串并给我错误。谢谢你提供的所有帮助。这是我正在使用的一些代码 sn-ps。

控制器:

    @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);
}

【问题讨论】:

    标签: java model-view-controller javafx


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      指定列

      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
      
      
      
                                      }
                                  }
      
                              };
                          }
                      }
              );
      

      【讨论】:

      • “这个代码很复杂,而且看起来不太好看”:如果你用 lambda 表达式替换匿名内部类,它会简单得多,而且看起来更好看
      • @James_D 意见问题,我认为这个比 lambdas 更具可读性,在这里你可以看到更好的情况。这只是我的口味,他可以用 netbeans 转换它,只需点击几下IDE 会为他做这件事 :),我当然喜欢 lambdas 流;D 它们很整洁
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-14
      • 1970-01-01
      • 2020-06-16
      • 1970-01-01
      • 2021-09-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多