我有一个ListView
和点击监听器。我想在悬停时添加新的侦听器。我用CellFactory
(下面的代码)编码了这个新的监听器。仅使用此代码,我的ListView
(<String>
)会显示没有文本的项目,但是两个侦听器都可以正常工作(无论如何,单击侦听器都可以正常工作),并且可以正确选择项目。
CellFactory
的{{1}}中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;
});
答案 0 :(得分:3)
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
子类。)