JavaFX:CellFactory / Cells与单个节点 [英] JavaFX: CellFactory/Cells vs. individual Nodes
本文介绍了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屋!
查看全文