我的点击侦听器带有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);
最佳答案
默认情况下,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
子类。)