Eclipse 在JFace TreeViewer中搜索
在我的插件中,我使用JFace TreeViewer在树中显示数据。默认情况下,树不会展开,仅在+的单击下展开为标高。但是,我需要对树的整个项目执行搜索(用户输入的文本),而不仅仅是显示的项目。我知道只有在单击+之后,才会延迟加载所有子级项目。是否有一种方法可以重设树的所有项目,而不仅仅是显示的项目?在树中搜索通常使用FilteredTree类实现,该类为您提供一个树,树上有一个文本框,用于将查询放入其中。然后FilteredTree类管理过滤操作。您可以在“首选项”对话框中看到它的作用 即使这不太符合您的要求,您也可以引用FilteredTree源代码来帮助您实现自己的搜索功能。Eclipse 在JFace TreeViewer中搜索,eclipse,Eclipse,在我的插件中,我使用JFace TreeViewer在树中显示数据。默认情况下,树不会展开,仅在+的单击下展开为标高。但是,我需要对树的整个项目执行搜索(用户输入的文本),而不仅仅是显示的项目。我知道只有在单击+之后,才会延迟加载所有子级项目。是否有一种方法可以重设树的所有项目,而不仅仅是显示的项目?在树中搜索通常使用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。筛选树删除与您的筛选/查询不匹配的项,这是显示您在大型树中搜索的内容的非常好的方法。在“首选项”对话框中使用它,以获得对它的感觉。