Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Eclipse 在JFace TreeViewer中搜索_Eclipse - Fatal编程技术网

Eclipse 在JFace TreeViewer中搜索

Eclipse 在JFace TreeViewer中搜索,eclipse,Eclipse,在我的插件中,我使用JFace TreeViewer在树中显示数据。默认情况下,树不会展开,仅在+的单击下展开为标高。但是,我需要对树的整个项目执行搜索(用户输入的文本),而不仅仅是显示的项目。我知道只有在单击+之后,才会延迟加载所有子级项目。是否有一种方法可以重设树的所有项目,而不仅仅是显示的项目?在树中搜索通常使用FilteredTree类实现,该类为您提供一个树,树上有一个文本框,用于将查询放入其中。然后FilteredTree类管理过滤操作。您可以在“首选项”对话框中看到它的作用 即使这

在我的插件中,我使用JFace TreeViewer在树中显示数据。默认情况下,树不会展开,仅在+的单击下展开为标高。但是,我需要对树的整个项目执行搜索(用户输入的文本),而不仅仅是显示的项目。我知道只有在单击+之后,才会延迟加载所有子级项目。是否有一种方法可以重设树的所有项目,而不仅仅是显示的项目?

在树中搜索通常使用FilteredTree类实现,该类为您提供一个树,树上有一个文本框,用于将查询放入其中。然后FilteredTree类管理过滤操作。您可以在“首选项”对话框中看到它的作用

即使这不太符合您的要求,您也可以引用FilteredTree源代码来帮助您实现自己的搜索功能。

public void searchTree(String searchtext){
    public void searchTree(String searchtext) {

    viewer.collapseAll();
    final int itemCount = viewer.getTree().getItemCount();
    for (int itemIndex = 0; itemIndex < itemCount; itemIndex++) {
        TreeItem item = viewer.getTree().getItem(itemIndex);
        if (item.getData().toString().toUpperCase().contains(searchtext.toUpperCase())) {

            viewer.expandToLevel(item.getData(), TreeViewer.ALL_LEVELS);
            for (int i = 0; i < item.getItems().length; i++) {
                if (item.getItem(i).getData().toString().toUpperCase().contains(searchtext.toUpperCase())) {
                    item.getItem(i).setBackground(new Color(Display.getCurrent(), 204, 255, 153));
                }

            }
        } else {
            item.setForeground(new Color(Display.getCurrent(), 0, 0, 0));
        }

    }
}
viewer.collapseAll(); final int itemCount=viewer.getTree().getItemCount(); 对于(int-itemIndex=0;itemIndex

希望这能解决您的问题

谢谢。我要去看看过滤树。但我假设FilteredTree会隐藏所有与搜索不匹配的Remining元素。也许调整FilteredTree并拥有自己的实现可以帮助我的searchRight。筛选树删除与您的筛选/查询不匹配的项,这是显示您在大型树中搜索的内容的非常好的方法。在“首选项”对话框中使用它,以获得对它的感觉。