JavaFXTreeView向视图随机添加额外图标

JavaFXTreeView向视图随机添加额外图标,javafx,javafx-8,javafx-2,Javafx,Javafx 8,Javafx 2,我正在使用JavaFXTreeView,并在树视图中添加了图标。 我使用以下代码将图标添加到树项中。使用Jfeniox库进行材质设计图标。当我单击树项目时,图标会随机出现在树视图列表的末尾,如图所示 rootTreeView.setCellFactory(tv -> new TreeCell<LeafItem>() { @Override public void updateItem(final LeafItem item, final boo

我正在使用JavaFXTreeView,并在树视图中添加了图标。

我使用以下代码将图标添加到树项中。使用Jfeniox库进行材质设计图标。当我单击树项目时,图标会随机出现在树视图列表的末尾,如图所示

rootTreeView.setCellFactory(tv -> new TreeCell<LeafItem>() {
        @Override
        public void updateItem(final LeafItem item, final boolean empty) {
            super.updateItem(item, empty);

            setText(null);
            setTooltip(null);
            setContextMenu(null);

            if (!empty) {
                if (getTreeItem().equals(rootTreeItem)) {
                    if (item == null) {
                        setText("sasa");
                    }
                }
                if (item instanceof Project) {
                    final Project project = (Project) item;
                    setText(project.getName());
                    setGraphic(createIcon(MaterialDesignIcon.FOLDER));
                }
            }
        }
    });
private MaterialDesignIconView createIcon(final MaterialDesignIcon icon) {
    final MaterialDesignIconView materialDesignIconView = new MaterialDesignIconView(
            icon);
    materialDesignIconView.setSize("1.5em");
    materialDesignIconView.setStyleClass("icon-color");
    return materialDesignIconView;
}
rootTreeView.setCellFactory(tv->new TreeCell()){
@凌驾
public void updateItem(最终leaftItem项,最终布尔值为空){
super.updateItem(项,空);
setText(空);
设置工具提示(空);
setContextMenu(空);
如果(!空){
if(getTreeItem().equals(rootTreeItem)){
如果(项==null){
setText(“sasa”);
}
}
if(项目的项目实例){
最终项目=(项目)项;
setText(project.getName());
setGraphic(createIcon(MaterialDesignIcon.FOLDER));
}
}
}
});
私有材质设计图标视图创建图标(最终材质设计图标){
最终材料设计视图材料设计视图=新材料设计视图(
图标);
材料设计视图设置尺寸(“1.5em”);
MaterialDesigningView.setStyleClass(“图标颜色”);
返回物料设计视图;
}

在单元格的
updateItem
方法中,如果单元格为空或项目不是
项目的实例,则不将
graphic
属性设置为
null
。由于可以将项目重新分配给单元格,因此需要执行此操作才能从单元格中删除图标:

@Override
public void updateItem(final LeafItem item, final boolean empty) {
    super.updateItem(item, empty);

    setText(null);
    setTooltip(null);
    setContextMenu(null);
    setGraphic(null);

    ...

在单元格的
updateItem
方法中,如果单元格为空或项目不是
项目的实例,则不将
graphic
属性设置为
null
。由于可以将项目重新分配给单元格,因此需要执行此操作才能从单元格中删除图标:

@Override
public void updateItem(final LeafItem item, final boolean empty) {
    super.updateItem(item, empty);

    setText(null);
    setTooltip(null);
    setContextMenu(null);
    setGraphic(null);

    ...
如果单元格为空,则必须将图形也设置为null…如果单元格为空,则必须将图形也设置为null。。。