gpt4 book ai didi

java - 如何在 JavaFX TreeView 中搜索下一个 TreeItem?

转载 作者:搜寻专家 更新时间:2023-11-01 03:32:49 28 4
gpt4 key购买 nike

我想设置一些搜索功能,以便当您在 TextField 中键入文本并按回车键时,它会在 TreeView 中找到该字符串的第一个实例。然后,当你再次按下 enter 时,它会找到第二个实例,再次按下它会找到第三个,等等......

搜索 TreeView 并找到第一个包含文本的 TreeItem 似乎并不难,但我不确定如何继续在 TreeView 中搜索包含所述文本的其他 TreeItem。我想搜索 TreeView 中的所有文件夹/文档需要某种递归函数,但我不确定。因此,我想问问是否有人可以提供有关如何创建此搜索功能的示例或提示。任何帮助将不胜感激:)

德鲁

最佳答案

您可以使用递归函数来搜索树。

在下面的代码中,我维护了 1 个实例变量,它保存了 searchBtn 被点击的次数,虽然这解决了问题,但当用户再次点击搜索按钮时,它并不是最佳选择虽然它得到了下一场比赛,但它从头开始遍历树(而不是从上一场比赛开始),你现在可以用这个作为解决方案,同时我会尝试提出一个更优化的解决方案

 public class TreeViewSample extends Application {

private int count=0;

private TreeView<String> tree;
public static void main(String[] args) {
launch(args);
}

@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Tree View Sample");


TextField txtField=new TextField();
Button searchBtn=new Button("Search");

txtField.setOnAction(new EventHandler<ActionEvent>() {

@Override
public void handle(ActionEvent arg0) {
count=0;
}
});
TreeItem<String> rootItem = new TreeItem<String> ("Root");
rootItem.setExpanded(true);

TreeItem<String> item1 = new TreeItem<String> ("Child 1");
TreeItem<String> item12 = new TreeItem<String> ("Child 12");
item1.getChildren().add(item12);
TreeItem<String> item2 = new TreeItem<String> ("Child 2");
TreeItem<String> item21 = new TreeItem<String> ("Child 21");
item2.getChildren().add(item21);
TreeItem<String> item211 = new TreeItem<String> ("Child 12");
item21.getChildren().add(item211);
TreeItem<String> item3 = new TreeItem<String> ("Child 3");
TreeItem<String> item31 = new TreeItem<String> ("Child 12");
item3.getChildren().add(item31);
rootItem.getChildren().addAll(item1,item2,item3);
searchBtn.setOnAction(new EventHandler<ActionEvent>() {

@Override
public void handle(ActionEvent arg0) {
count++;
handleSearch(rootItem,txtField.getText());

}
});
this.tree = new TreeView<String> (rootItem);

VBox root = new VBox();
root.getChildren().addAll(tree,txtField,searchBtn);
primaryStage.setScene(new Scene(root, 300, 250));
primaryStage.show();
}

protected int handleSearch(TreeItem<String> rootItem, String text) {
int count=0;
if(rootItem!=null&&rootItem.getValue().equals(text)){
tree.getSelectionModel().select(rootItem);
return 1;
}
if(rootItem!=null&&!rootItem.getChildren().isEmpty()){
for(TreeItem<String> treeItem: rootItem.getChildren()){
count+=handleSearch(treeItem, text);
if(this.count==count){
break;
}
}
}
return count;
}
}

请注意,如果您不想使用递归,也可以使用树迭代器并在循环中迭代它

关于java - 如何在 JavaFX TreeView 中搜索下一个 TreeItem?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44088649/

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