如何正确地使Eclipse RCP ContentOutlineView TreeViewer聚焦并响应选择事件

时间:2014-04-27 04:41:13

标签: java eclipse treeview rcp

如何在点击TreeViewer时正确地为包含ContentOutlineView的部分提供焦点?

我正在创建自己的大纲视图,当(视图)部分未对焦时单击TreeViewer中的ContentOutlinePage时,无法正确触发选择事件。在TreeViewer的选择事件开始之前,我需要点击标签以使部件成为焦点。

我创建了自己的FooBarOutlineView,扩展了PageBookView。我只为FooBarModelView个部分创建网页,并实例化FooOutlinePageBarOutlinePage扩展ContentOutlinePage

我的BarOutlinePage重载了createControl方法,将内容提供程序添加到TreeViewer

public class BarOutlinePage extends ContentOutlinePage {

    @Override
    public void createControl(Composite parent) {
        super.createControl(parent);
        getTreeViewer().setContentProvider(new MyContentProvider(new MyTreeModel()));
        getTreeViewer().setLabelProvider(new MyViewLabelProvider());
        getTreeViewer().setInput("root");
    }
}

我的FooBarOutlineView(为简洁而修剪)看起来像:

public class FooBarOutlineView extends PageBookView {

    @Override
    protected IPage createDefaultPage(PageBook book) {
        MessagePage defaultPage = new MessagePage();
        initPage(defaultPage);
        defaultPage.setMessage("An outline is not available. (default page)");
        defaultPage.createControl(book);
        return defaultPage;
    }

    @Override
    protected PageRec doCreatePage(IWorkbenchPart part) {
        IPageBookViewPage page = null;
        if (part instanceof FooModelView)
            page = new FooOutlinePage();
        else if (part instanceof BarModelView)
            page = new BarOutlinePage();
        initPage(page);
        page.createControl(getPageBook());
        return new PageRec(part, page);
    }

    @Override
    protected boolean isImportant(IWorkbenchPart part) {
        return (part instanceof FooBarModelView);
    }
}

热烈欢迎任何见解!

1 个答案:

答案 0 :(得分:0)

普通的ContentOutline类在FooBarOutlineView中使用了我认为您需要的方法覆盖:

public void partBroughtToTop(IWorkbenchPart part) {
     partActivated(part);
}