在JFace TreeViewer中搜索

时间:2012-07-11 22:24:25

标签: eclipse

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

2 个答案:

答案 0 :(得分:2)

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

即使这不符合您的要求,您也可以引用FilteredTree来帮助您实现自己的搜索工具。

答案 1 :(得分: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));
        }

    }
}

希望这能解决您的问题