gpt4 book ai didi

java - 如何在 TreeViewer 中选择特定节点?

转载 作者:行者123 更新时间:2023-12-01 10:20:52 25 4
gpt4 key购买 nike

我为特定项目构建了一个树查看器,但现在我需要在此树查看器中选择特定项目/节点。

为了构建树查看器,我这样做了:

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 中的其他插件也会收到通知。

Eclipse 4 API

为此,您可以将 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!
}
}

Eclipse 3 API

为此,您必须向选择框架注册您的查看器。将其添加到已添加查看器的部分的 createPartControl 方法中:

    getSite().setSelectionProvider(viewer);

然后,捕捉您自己的选择:

    getSite().getPage().addPostSelectionListener(this); // Implement ISelectionListener

引用文献:https://wiki.eclipse.org/E4/EAS/Selection

关于java - 如何在 TreeViewer 中选择特定节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35638275/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com