gpt4 book ai didi

treeview - 树根节点右键菜单选项

转载 作者:行者123 更新时间:2023-12-03 06:44:02 25 4
gpt4 key购买 nike

我想要在树根节点(JavaFX)中右键单击菜单选项。任何人都可以帮我解决这个问题吗?

TreeItem<String> root = new TreeItem<>(""+selectedDirectory);
root.setExpanded(true);

locationTreeView.setRoot(root);

root.getChildren().addAll(
new TreeItem<>("Item 1"),
new TreeItem<>("Item 2"),
new TreeItem<>("Item 3")
);

最佳答案

您可以通过两个步骤执行所需的行为:

  1. TreeView 上定义自定义 TreeCell 工厂;
  2. 在根树项的 TreeCell 上附加上下文菜单。

以下代码定义了自定义TreeCell工厂:

// defines a custom tree cell factory for the tree view
tree.setCellFactory(new Callback<TreeView<String>, TreeCell<String>>() {

@Override
public TreeCell<String> call(TreeView<String> arg0) {
// custom tree cell that defines a context menu for the root tree item
return new MyTreeCell();
}
});

而且,这里是一个自定义树单元的实现,它附加了根树项的上下文菜单:

class MyTreeCell extends TextFieldTreeCell<String> {
private ContextMenu rootContextMenu;

public MyTreeCell() {
// instantiate the root context menu
rootContextMenu =
ContextMenuBuilder.create()
.items(
MenuItemBuilder.create()
.text("Menu Item")
.onAction(
new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent arg0) {
System.out.println("Menu Item Clicked!");
}
}
)
.build()
)
.build();
}

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

// if the item is not empty and is a root...
if (!empty && getTreeItem().getParent() == null) {
setContextMenu(rootContextMenu);
}
}
}

以下示例说明了单元工厂和自定义单元的一起使用:

public class TreeViewWithContextMenuOnRoot extends Application {
public static void main(String[] args) {
launch(args);
}

@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Tree with context menu on root");

TreeItem<String> rootItem = new TreeItem<String> ("Tree root");
rootItem.setExpanded(true);
for (int i = 1; i < 3; i++) {
TreeItem<String> item = new TreeItem<String> ("item" + i);
rootItem.getChildren().add(item);
}
final TreeView<String> tree = new TreeView<String> ();

tree.setRoot(rootItem);

// defines a custom tree cell factory for the tree view
tree.setCellFactory(new Callback<TreeView<String>, TreeCell<String>>() {

@Override
public TreeCell<String> call(TreeView<String> arg0) {
// custom tree cell that defines a context menu for the root tree item
return new MyTreeCell();
}
});

StackPane root = new StackPane();
root.getChildren().add(tree);
primaryStage.setScene(new Scene(root, 200, 100));
primaryStage.show();
}

private static class MyTreeCell extends TextFieldTreeCell<String> {
private ContextMenu rootContextMenu;

public MyTreeCell() {
// instantiate the root context menu
rootContextMenu =
ContextMenuBuilder.create()
.items(
MenuItemBuilder.create()
.text("Menu Item")
.onAction(
new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent arg0) {
System.out.println("Menu Item Clicked!");
}
}
)
.build()
)
.build();
}

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

// if the item is not empty and is a root...
if (!empty && getTreeItem().getParent() == null) {
setContextMenu(rootContextMenu);
}
}
}
}

您可以查看TreeView tutorial查看与此 JavaFX 控件相关的其他用途和示例。

关于treeview - 树根节点右键菜单选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18207139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com