JavaFx ListView не показывает текст, но работает после cellFactory - PullRequest
0 голосов
/ 27 августа 2018

У меня есть ListView с прослушивателем щелчков. Я хочу добавить нового слушателя при наведении. Я закодировал этого нового слушателя с помощью CellFactory (код ниже). Только с этим кодом мой ListView (<String>) показывает элементы без текста, но оба слушателя работают нормально (щелчок слушателя работает в любом случае) и элементы выбираются правильно.

Код CellFactory в Controller initialize():

myListView.setCellFactory(lv -> {
        ListCell<String> cell = new ListCell<String>() {};
        cell.hoverProperty().addListener((obs, wasHovered, isNowHovered) -> {
        if(isNowHovered) {
            handleCellHover(cell);
        } else {
            handleCellHoverEnd();
        }
    });
    return cell;
});

Код добавления элементов:

// ...
ObservableList<String> data = FXCollections.observableArrayList(data); //data is List<String>
listView.setItems(data);

1 Ответ

0 голосов
/ 27 августа 2018

ListCell.updateItem по умолчанию ничего не делает, кроме как присваивает свойства item и empty. Вам необходимо переопределить этот метод, чтобы использовать элемент для изменения внешнего вида ячейки, например, установив свойство text:

ListCell<String> cell = new ListCell<String>() {
    @Override
    protected void updateItem(String item, boolean empty) {
        super.updateItem(item, empty);

        if (empty || item == null) {
            setText("");
        } else {
            setText(item);
        }
    }
};

(по умолчанию cellFactory использует подкласс ListCell с аналогичной реализацией updateItem.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...