代码之家  ›  专栏  ›  技术社区  ›  Kyu Vulpes

有没有办法在JavaFX TableView上使用GregorianCalendar?

  •  1
  • Kyu Vulpes  · 技术社区  · 6 年前

    有没有办法让TableView中的列显示正确的日期,而不是:

    java.util.GregorianCalendar[time=?areFieldsSet=false...
    

    我想知道,因为在我的日期栏上显示这样的内容很烦人,而且必须在日期和GregorianCalendar get的混乱和恼人之间切换。

    1 回复  |  直到 6 年前
        1
  •  3
  •   James_D    6 年前

    首先,我强烈建议使用 java.time API ,而不是传统类,例如 java.util.Calendar java.util.Date

    在任何情况下,都可以通过在列上使用单元格工厂来更改给定列中单元格中数据的显示方式。如果单元格值工厂正在生成 Calendar 你大概有

    TableColumn<MyTableType, Calendar> dateColumn ;
    // ...
    dateColumn.setCellValueFactory(...);
    

    您还可以执行其他操作

    DateFormat dateFormat = DateFormat.getDateInstance();
    dateColumn.setCellFactory(col -> new TableCell<MyTableType, Calendar>() {
        @Override
        protected void updateItem(Calendar date, boolean empty) {
            super.updateItem(date, empty);
            if (empty) {
                setText(null);
            } else {
                setText(dateFormat.format(date.getTime()));
            }
        }
    });
    

    如果您使用上述 JAVA时间 API,表示日期 LocalDate 并使用 DateTimeFormatter 要进行格式化,请执行以下操作:

    TableColumn<MyTableType, LocalDate> dateColumn ;
    // ...
    dateColumn.setCellValueFactory(...);
    DateTimeFormatter dateFormat = DateTimeFormatter.ISO_LOCAL_DATE;
    dateColumn.setCellFactory(col -> new TableCell<MyTableType, LocalDate>() {
        @Override
        protected void updateItem(LocalDate date, boolean empty) {
            super.updateItem(date, empty);
            if (empty) {
                setText(null);
            } else {
                setText(dateFormat.format(date));
            }
        }
    });