#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(...)
) . Как я уже говорил в ответе, вам нужны оба.