JavaFx ListView不显示文本,但在cellFactory之后工作

时间:2018-08-27 20:19:07

标签: java listview javafx

我有一个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;
});

1 个答案:

答案 0 :(得分:3)

ListCell.updateItem默认不执行任何操作,只分配itemempty属性。您需要重写此方法,才能使用该项来修改单元格的外观,例如通过设置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子类。)