gpt4 book ai didi

java - 如何将函数与 javafx 中的 TreeView 子级关联

转载 作者:行者123 更新时间:2023-12-02 13:27:09 24 4
gpt4 key购买 nike

嘿,我是 javafx 和 gui 构建的新手

所以我有一个 TreeView 和多个根,每个根有多个子节点

@FXML
TreeView<String> bro;

TreeItem<String> root=new TreeItem<>("root");
TreeItem<String> child = new TreeItem<>("child");
TreeItem<String> child2 = new TreeItem<>("child");
TreeItem<String> child3 = new TreeItem<>("child");
TreeItem<String> child4 = new TreeItem<>("child");
TreeItem<String> child5 = new TreeItem<>("child");

public void initialize(){

root.getChildren().add(child);
root.getChildren().add(child2);
root.getChildren().add(child3);
root.getChildren().add(child4);
root.getChildren().add(child5);
root.setExpanded(true);
bro.setRoot(root);

}

因此,由于 TreeView 已初始化,因此我希望将 child2 与我拥有的函数关联或绑定(bind),该函数每当我单击 child2 时就会运行

public void openWindow(){
// code to open new window
}

每次点击 child2 时,我想要 openwindow() 函数打开一个新窗口来运行

我还想知道何时选择 child2(如果可能的话)

我该怎么做

谢谢

最佳答案

要响应单元格上的鼠标点击,请在 TreeView 上设置一个单元格工厂,以便您可以向单元格添加事件处理程序:

bro.setCellFactory(tv -> {
TreeCell<String> cell = new TreeCell<String>() {
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
setText(item);
}
};

cell.setOnMouseClicked(e -> {
if (cell.getTreeItem() == child2) {
openWindow();
}
});

return cell ;
});

要了解某个项目何时被选择,请使用树的选择模型的选定项目属性注册一个监听器:

bro.getSelectionModel().selectedItemProperty().addListener((obs, oldSelection, newSelection) -> {
if (newSelection == child2) {
System.out.println("child2 selected");
}
});

关于java - 如何将函数与 javafx 中的 TreeView 子级关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43348591/

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