JavaFX:CellFactory / Cells与单个节点 [英] JavaFX: CellFactory/Cells vs. individual Nodes

查看:214
本文介绍了JavaFX:CellFactory / Cells与单个节点的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我对JavaFX中的TreeView有疑问。我不太明白使用cellfactory。

I have a question regarding the TreeView in JavaFX. I do not quite get the point of using the cellfactory.

假设我有以下树:

public void initialize(TreeView<String> treeView){
    treeView.setRoot(new TreeItem<String>("Root"));
    root.getChildren().add(new TreeItem<String>("1"));
    root.getChildren().add(new TreeItem<String>("2"));
    root.getChildren().add(new TreeItem<String>("3"));
    root.getChildren().add(new TreeItem<String>("4"));
}

我想为每个项目添加一个Contextmenu。我执行以下操作:

And I want to add a Contextmenu to each of the items. I do the following:

treeView.setCellFactory(new Callback<TreeView<String>, TreeCell<String>>() {
     @Override
     public TreeCell<String> call(TreeView<String> stringTreeView) {
             return new ContextMenuCell();
        }
    });

ContextMenuCell.java如下所示:

ContextMenuCell.java looks like this:

public class ContextMenuCell extends TreeCell<String> {

    public ContextMenuCell (){
        setContextMenu(new ContextMenu(new MenuItem("Test")));
    }
}

这将为每个单元格添加一个上下文菜单,但是Treeitems的标签消失了。如何让它们保留或读取?

This will add a contextmenu to each of the cells, but the label of the Treeitems disappear. How can I make them stay or readd?

推荐答案

您需要覆盖TreeCell的updateItem方法,即绘制它的位置

You need to override the updateItem method of TreeCell, that's where it gets drawn

private static final class ContextMenuCell extends TreeCell {

    ContextMenuCell() {
        setContextMenu(new ContextMenu(new MenuItem("Test")));
    }

    @Override
    public void updateItem(Object item, boolean empty) {
        super.updateItem(item, empty);
        if (empty) {
            setText(null);
            setGraphic(null);
        } else {
            setText(item.toString());
            setGraphic(getTreeItem().getGraphic());
        }
    }
}

这篇关于JavaFX:CellFactory / Cells与单个节点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆