【问题标题】:Eclipse plugin: Properties information not shown correctly when treeview is part of a tabfolder/tabitemEclipse 插件:当树视图是选项卡文件夹/选项卡的一部分时,属性信息未正确显示
【发布时间】:2017-01-08 23:07:26
【问题描述】:

我正在开发一个带有树查看器的 Eclipse 插件。最初我有一个树视图,我在标准 Eclipse 属性选项卡中显示了一些元素的信息。这没有问题。 我遵循了一个实现 IPropertySource 和 IAdapterFactory 的示例。在我调用的视图的方法 createPartControl() getSite().setSelectionProvider(searchViewer); 它注册了属性。

现在我已经向插件添加了一个 swt tabfolder 项目。现在在每个新的 tabitem 中都会显示一个树视图。这工作正常,但属性选项卡中的信息不再正确显示。不过有一个奇怪的行为。在感兴趣的树元素上,我还添加了一个双击监听器来做其他事情。在我双击一个条目并在单击另一个元素后立即显示双击元素的属性?!

我想问题出在 SelectionProvider 上。但是我现在无法弄清楚如何正确实现它

【问题讨论】:

    标签: java eclipse plugins treeview swt


    【解决方案1】:

    属性视图始终显示选择提供程序所说的当前选择的对象的属性。

    如果您在多个选项卡上有多个树视图,则必须编写一个自定义选择提供程序 (ISelectionProvider),它知道当前哪个树处于活动状态并提供适当的选择。

    例如,以下是 JDT 代码使用的选择提供程序,您可以将其用作基础:

    public class SimpleSelectionProvider implements ISelectionProvider {
    
        private final ListenerList<ISelectionChangedListener> fSelectionChangedListeners;
        private ISelection fSelection;
    
        public SimpleSelectionProvider() {
            fSelectionChangedListeners = new ListenerList<>();
        }
    
        @Override
        public ISelection getSelection() {
            return fSelection;
        }
    
        @Override
        public void setSelection(ISelection selection) {
            fSelection= selection;
    
            for (ISelectionChangedListener listener : fSelectionChangedListeners) {
                listener.selectionChanged(new SelectionChangedEvent(this, selection));
            }
        }
    
        @Override
        public void removeSelectionChangedListener(ISelectionChangedListener listener) {
            fSelectionChangedListeners.remove(listener);
        }
    
        @Override
        public void addSelectionChangedListener(ISelectionChangedListener listener) {
            fSelectionChangedListeners.add(listener);
        }
    }
    

    (org.eclipse.jdt.internal.ui.actions.SimpleSelectionProvider)

    You would have to make all your trees call the setSelection method when selections change.

    【讨论】:

      猜你喜欢
      • 2012-01-29
      • 2015-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多