在我的插件中,我使用JFace TreeViewer在树中显示数据。默认情况下,树不会展开,只有点击+它才会展开到级别。但是我需要在树的整个项目上执行搜索(用户输入的文本)而不仅仅是显示的项目。我理解所有子级别项目只有在单击+后才会延迟加载。有没有办法收回树的所有项目,而不仅仅是显示的项目。?
答案 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));
}
}
}
希望这能解决您的问题