作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我为特定项目构建了一个树查看器,但现在我需要在此树查看器中选择特定项目/节点。
为了构建树查看器,我这样做了:
viewer = new TreeViewer(composite);
viewer.getTree().setLayoutData(gridData);
viewer.setContentProvider(new FileTreeContentProvider());
viewer.setLabelProvider(new FileTreeLabelProvider());
viewer.setInput(ResourcesPlugin.getWorkspace().getRoot().getProject(folderName.getText()));
viewer.expandAll();
到目前为止,一切都很好,但现在,当我在树中选择特定项目时,我不知道如何使用监听器执行某些操作。任何想法?谢谢。
编辑:我明白了!
viewer.addSelectionChangedListener(
new ISelectionChangedListener(){
public void selectionChanged(SelectionChangedEvent event) {
if(event.getSelection() instanceof IStructuredSelection) {
IStructuredSelection selection = (IStructuredSelection)event.getSelection();
Object o = selection.getFirstElement();
if (o instanceof IFile){
IFile file = (IFile)o;
}else {
//what ?
}
}
}
}
);
最佳答案
这是出色的第一步,但还有一种更好的方法,它更多地体现在Eclipse 的核心和灵魂中。
您的代码正在监听本地更改,但您希望使代码可扩展,以便当有人在查看器中选择某些内容时,Eclipse 中的其他插件也会收到通知。
为此,您可以将 ESelectionService 注入(inject)到您的部件中,然后使用您已提供的监听器将选择转发到工作台。
@Inject
private ESelectionService selectionService;
viewer.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
IStructuredSelection selection = (IStructuredSelection) event.getSelection();
// set the selection to the service
selectionService.setSelection(
selection.size() == 1 ? selection.getFirstElement() : selection.toArray());
然后,捕捉您自己的选择:
@Inject
void setSelection(@Optional @Named(IServiceConstants.ACTIVE_SELECTION) IFile pFile) {
if (pFile == null) {
//what ?
} else {
// magic!
}
}
为此,您必须向选择框架注册您的查看器。将其添加到已添加查看器的部分的 createPartControl 方法中:
getSite().setSelectionProvider(viewer);
然后,捕捉您自己的选择:
getSite().getPage().addPostSelectionListener(this); // Implement ISelectionListener
关于java - 如何在 TreeViewer 中选择特定节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35638275/
我是一名优秀的程序员,十分优秀!