从treeviewer拖动项目而不让查看器获得焦点

时间:2013-02-19 22:27:24

标签: drag-and-drop swt jface

问题

开始拖放操作时,有没有办法防止树形图获得焦点?或者您是否知道另一种方法可以防止它在拖动时更改其选择?

场合

  • 第1类
    • Note 1.1
  • 第2类
    • Note 2.1

我有显示类别的TreeViewer“类别”和显示所选类别中的注释的1个TableViewer“注释”。通过数据绑定选择“类别”视图提供“注释”视图内容。

问题

当我在“类别”视图中选择了类别1时,我会在“注释”视图中看到注释1.1。 问题是,当我想将类别2拖到Note 1.1时,“类别”视图选择了类别2,我不能再删除注释1.1上的类别,因为现在“注释”视图仅显示注释2.1

1 个答案:

答案 0 :(得分:0)

我不认为您可以在要开始拖动时停止类别视图获得焦点和触发选择更改。这只是控件的自然行为。可能有一些非传统的方法来推迟选择射击,但它们可能无法完美地运作。

但是,为了解决您的问题,我建议您配置拖放支持,以便在开始拖动“类别2”(并因此更改选择)时,首先必须将鼠标悬停在“类别1”上(应重新选择“第1类“),它允许你在”注1.1“上删除”第2类“。

这意味着您还可以向类别查看器添加删除支持,并在DropTargetListener#dragOver(DropTargetEvent)中将选择设置为鼠标悬停在其上的类别。这应该开始显示正确的音符,以便您可以将拖动的类别放在其上。