JavaFX: отображать текст вместо логического значения (true / false)

#java #javafx #tableview

#java #javafx #просмотр таблицы

Вопрос:

Я использую tableview JavaFX для отображения List<Contact> .

Для функции инициализации контроллера столбцы tableview привязываются List<Contact> следующим образом:

 sprintName.setCellValueFactory(new PropertyValueFactory<Contact, String>("name"));
importStatus.setCellValueFactory(new PropertyValueFactory<Contact, Boolean>("imported"));
enddate.setCellValueFactory(new PropertyValueFactory<Contact, String>("endDate"));
  

Тем не менее, я хочу отобразить для столбца imported вместо true/false текста imported/new

Возможно ли это JavaFX или мне нужно изменить тип imported на String ?

Ответ №1:

Используйте фабрику ячеек (в дополнение к фабрике значений ячеек):

 importStatus.setCellFactory(tc -> new TableCell<Contact, Boolean>() {
    @Override
    protected void updateItem(Boolean item, boolean empty) {
        super.updateItem(item, empty);
        setText(empty ? null :
            item.booleanValue() ? "imported" : "new");
    }
});
  

Общие сведения о механизме отображения ячеек см. В Cell документации к классу.

Комментарии:

1. Извините за мой поздний ответ, я попробовал ваш подход, но получил другую ошибку: The type of setCellValueFactory(Callback<CellDataFeatures<S,T>,ObservableValue<T>>) is erroneous where S,T are type-variables: S extends Object declared in class TableColumn T extends Object declared in class TableColumn incompatible types: bad return type in lambda expression <anonymous TableCell<Contact,Boolean>> cannot be converted to ObservableValue<Boolean>

2. @ti.voodoo Вы перепутали метод, который я вызвал ( setCellFactory(...) ), с методом, который у вас уже есть ( setCellValueFactory(...) ) . Как я уже говорил в ответе, вам нужны оба.