我在理解TreeViewer
用户拖动项目时如何突出显示 的项目时遇到问题。
这是发生的事情:我开始拖动 中的底部项目Treeviewer
,并且它旁边的项目相应地突出显示。问题是,我无法从DragOver
事件中获取突出显示的项目。但是如果我从这个位置放下项目,Drop
方法中的事件将有“项目”字段保存突出显示的项目。突出显示时树的选择不会改变
我想要做什么:我想根据突出显示的项目更改指针的图像。问题是我不知道如何理解突出显示的是哪一个。对我来说另一个谜团是,在 Drop 方法中,突出显示的项目将成为放置的目标(在这种情况下,从顶部开始的第二个字段)。我不想使用SWT.FULL_SELECTION
这是图像:
源代码片段(我想要的是在DragOver
我没有直接将鼠标悬停在项目上的情况下的功能)
final DropTarget valuesTarget = new DropTarget(tree, DND.DROP_MOVE);
valuesTarget.addDropListener(new DropTargetAdapter()
@Override
public void dragOver(DropTargetEvent event)
{
if (transfer.isSupportedType(event.currentDataType))
{
final DropTarget target = (DropTarget)event.widget;
final Tree tree = (Tree)target.getControl();
final Point relativeDropPoint = getRelativeDropPoint(event);
final TreeItem targetItem = tree.getItem(relativeDropPoint);
if (targetItem != null)
{
event.feedback =
DND.FEEDBACK_SELECT | DND.FEEDBACK_SCROLL;
if (event.item.getData() instanceof NotAcceptableClass)
{
event.detail = DND.DROP_NONE;
}
}
}
}
private Point getRelativeDropPoint(DropTargetEvent event)
{
final Tree tree = (Tree)((DropTarget)event.widget).getControl();
final Point tableLocation = tree.toDisplay(0, 0);
return new Point(event.x - tableLocation.x, event.y
- tableLocation.y);
}