Eclipse rcp 具有自己交互的自定义标记视图

Eclipse rcp 具有自己交互的自定义标记视图,eclipse-rcp,marker,Eclipse Rcp,Marker,我正在尝试创建自己的问题视图。 我发现以下和所有作品都很好 但是有没有可能添加自己的DoubleClickListener或类似的东西呢? 我想对列表中执行的用户操作做出反应 谢谢你的建议。以下是我要做的: 通过重写public void createPartControl(最终复合父对象)您将拥有父复合对象。通过调用parent.getChildren()可以迭代可用控件ExtendedMarkersView“默认”控件是MarkersTreeViewer,它是一个treeViewer,因此该

我正在尝试创建自己的问题视图。
我发现以下和所有作品都很好

但是有没有可能添加自己的DoubleClickListener或类似的东西呢?
我想对列表中执行的用户操作做出反应


谢谢你的建议。

以下是我要做的:

通过重写
public void createPartControl(最终复合父对象)
您将拥有父复合对象。通过调用parent.getChildren()可以迭代可用控件
ExtendedMarkersView
“默认”控件是MarkersTreeViewer,它是一个treeViewer,因此该控件将是一个树。有了树,您可以添加任何想要的侦听器,下面是代码段:

@Override
public void createPartControl(final Composite parent) {
    super.createPartControl(parent);

    for (final Control control : parent.getChildren()) {
        if (!(control instanceof Tree)) {
            continue;
        }

        tree = (Tree) control;

        final Listener[] listeners = tree.getListeners(SWT.DefaultSelection);
        if (listeners != null) {
            for (final Listener listener : listeners) {
                tree.removeListener(SWT.DefaultSelection, listener);
            }
        }
        tree.addMouseListener(new MouseAdapter() {

            @Override
            public void mouseDoubleClick(final MouseEvent e) {
                if (e.widget instanceof Tree) {
                    final Tree tree = (Tree) e.widget;

                    // do whatever you want
                }
            }

        });
    }
}

下面是我要做的:

通过重写
public void createPartControl(最终复合父对象)
您将拥有父复合对象。通过调用parent.getChildren()可以迭代可用控件
ExtendedMarkersView
“默认”控件是MarkersTreeViewer,它是一个treeViewer,因此该控件将是一个树。有了树,您可以添加任何想要的侦听器,下面是代码段:

@Override
public void createPartControl(final Composite parent) {
    super.createPartControl(parent);

    for (final Control control : parent.getChildren()) {
        if (!(control instanceof Tree)) {
            continue;
        }

        tree = (Tree) control;

        final Listener[] listeners = tree.getListeners(SWT.DefaultSelection);
        if (listeners != null) {
            for (final Listener listener : listeners) {
                tree.removeListener(SWT.DefaultSelection, listener);
            }
        }
        tree.addMouseListener(new MouseAdapter() {

            @Override
            public void mouseDoubleClick(final MouseEvent e) {
                if (e.widget instanceof Tree) {
                    final Tree tree = (Tree) e.widget;

                    // do whatever you want
                }
            }

        });
    }
}

我找到了一个解决方案,不是最好的,而是可以接受的方法。
我在ViewPart中使用SelectionService并注册一个新的SelectionListener

我的解决方案只接受问题视图中的选择,也许有更好的方法来区分事件

site.getWorkbenchWindow().getSelectionService().addSelectionListener(new ISelectionListener() {
    @Override
    public void selectionChanged(IWorkbenchPart part, ISelection selection) {
        IStructuredSelection s = (IStructuredSelection) selection;

        if (s.getFirstElement() instanceof MarkerItem) {
            MarkerItem marker = (MarkerItem) s.getFirstElement();
            if (marker != null && marker.getMarker() != null) {
                IMarker iMarker = marker.getMarker();

                // More Code here ...
            }
        }
    }
});

我找到了一个解决方案,不是最好的,而是可以接受的方法。
我在ViewPart中使用SelectionService并注册一个新的SelectionListener

我的解决方案只接受问题视图中的选择,也许有更好的方法来区分事件

site.getWorkbenchWindow().getSelectionService().addSelectionListener(new ISelectionListener() {
    @Override
    public void selectionChanged(IWorkbenchPart part, ISelection selection) {
        IStructuredSelection s = (IStructuredSelection) selection;

        if (s.getFirstElement() instanceof MarkerItem) {
            MarkerItem marker = (MarkerItem) s.getFirstElement();
            if (marker != null && marker.getMarker() != null) {
                IMarker iMarker = marker.getMarker();

                // More Code here ...
            }
        }
    }
});

谢谢你的回答。但我不能在我的例子中使用它,因为我的类扩展了MarkerSupportView,不允许覆盖方法createPartControl。我也这么做,扩展了MarkerSupportView,扩展了ExtendedMarkersView,我知道的问题是它在一个内部包中,但这是我能想到的最好的方法,如果其他人有一个绝妙的想法,我也会这么做,但这是目前为止我找到的唯一解决此需求的方法。我在SelectionService的帮助下找到了一个解决方案,请参阅我的答案。:)这不是最好的方法…谢谢你的回答。但我不能在我的例子中使用它,因为我的类扩展了MarkerSupportView,不允许覆盖方法createPartControl。我也这么做,扩展了MarkerSupportView,扩展了ExtendedMarkersView,我知道的问题是它在一个内部包中,但这是我能想到的最好的方法,如果其他人有一个绝妙的想法,我也会这么做,但这是目前为止我找到的唯一解决此需求的方法。我在SelectionService的帮助下找到了一个解决方案,请参阅我的答案。:)这不是最好的方法。。。