2016-02-11 2 views
1

У меня есть столбец LocalDateTime в моем TableView:Как изменить вид объекта в ячейке таблицы? - JavaFX

column_AddDate = new TableColumn<MyTableItem, LocalDateTime>(TITLE_ADD_DATE) 

Но результат - 2016-02-05T12:26:20.506 - это не так хороша, как для меня. Я хочу хранить и сортировать данные таблицы, используя правила класса LocalDateTime, но показывать их в произвольном формате. Например:

formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); 
formattedDateTime = dateTime.format(formatter); // "2016-02-05 12:26" 

Во-первых, что я судимое, чтобы писать пользовательские class DateTimeForTable extends LocalDateTime и переопределить toString() метод, но LocalDateTime является окончательным.

Итак, я считаю, что решение заключается в использовании метода setCellValueFactory() и тому подобного, но я не в этом разбираюсь.

Скажите, пожалуйста, как реализовать эту функцию.

ответ

4

Чтобы изменить способ представления данных, а не сами данные, вы должны использовать cellFactory. (Я предполагаю, что у вас уже есть cellValueFactory установлен, иначе вы не увидите никаких данных. Обратите внимание на cellFactory в дополнение к cellValueFactory, он не заменяет его.)

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); 
column_AddDate.setCellFactory(tc -> new TableCell<MyTableItem, LocalDateTime>() { 
    @Override 
    protected void updateItem(LocalDateTime item, boolean empty) { 
     super.updateItem(item, empty); 
     setText(empty ? null : formatter.format(item)); 
    } 
});