0

在我的插件中,我使用 JFace TreeViewer 在树中显示数据。默认情况下,树不会展开,只有在单击 + 时才会展开到级别。但是我需要对树的整个项目执行搜索(用户输入的文本),而不仅仅是显示的项目。我知道只有在单击 + 后才会延迟加载所有子级项目。有没有办法检索树的所有项目而不仅仅是显示的项目。?

4

2 回答 2

2

在树中搜索通常是使用 FilteredTree 类实现的,它为您提供了一棵树,上面有一个文本框,用于放置您的查询。然后 FilteredTree 类管理过滤操作。您可以在首选项对话框中看到它的实际效果。

即使这不太符合您的要求,您也可以参考 FilteredTree 源代码来帮助您实现自己的搜索工具。

于 2012-07-12T15:17:47.570 回答
0
    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));
        }

    }
}

希望这能解决你的问题

于 2021-02-10T14:35:41.590 回答