【问题标题】:How to give Eclipse RCP ContentOutlineView TreeViewer focus properly and respond to selection events如何正确赋予 Eclipse RCP ContentOutlineView TreeViewer 焦点并响应选择事件
【发布时间】:2014-06-12 17:22:31
【问题描述】:

点击TreeViewer时,如何正确给包含ContentOutlineView的部分焦点?

我正在创建自己的类似大纲的视图,当(视图)部分不在焦点上时单击ContentOutlinePage 中的TreeViewer 时,不会正确触发选择事件。我需要在TreeViewer 的选择事件触发之前单击选项卡以使该部分成为焦点。

我创建了自己的FooBarOutlineView,它扩展了PageBookView。我仅为FooBarModelView 部分创建页面并实例化扩展ContentOutlinePageFooOutlinePageBarOutlinePage

我的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);
    }
}

热烈欢迎任何见解!

【问题讨论】:

  • 您是否有理由不使用 ContentOutline 类的标准内容大纲视图?
  • 我的 FooBarOutlineView 响应的是 View,而不是编辑器。如果您能解释一下,我会很乐意将我的大纲页面放入现有的大纲中? (我知道我可能能够覆盖 isImportant 方法)
  • @greg-449 我将FooBarOutlineView 切换为扩展ContentOutline 并在我的视图中实现了getAdapter。更整洁(谢谢!),但存在同样的焦点问题。

标签: java eclipse treeview rcp


【解决方案1】:

普通的ContentOutline 类有这个方法覆盖,我认为你需要在你的FooBarOutlineView 中:

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

【讨论】:

  • 我已经添加了这个,但我仍然看到相同的行为。选择不在焦点时的 TreeViewer 不会使选项卡成为焦点。
  • 这是什么平台?在我的 Mac 上,选择视图中的任何内容都会立即获得焦点。
  • Windows 64 位 JVM。我很快会在我的 Macbook 上尝试相同的代码。
  • 我在 Mac 或 Win 上看到相同的行为,通常在 ContentOutline 中也看到相同的行为
猜你喜欢
  • 1970-01-01
  • 2015-10-06
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-18
  • 2010-11-02
相关资源
最近更新 更多