Java JFace Drag&;放置突出显示的项目

Java JFace Drag&;放置突出显示的项目,java,drag-and-drop,swt,jface,Java,Drag And Drop,Swt,Jface,我在理解用户拖动项目时如何突出显示TreeViewer的项目时遇到问题。 事情是这样的:我开始拖动Treeviewer中的底部项目,它旁边的项目相应地高亮显示。问题是,我无法从DragOver事件中获取突出显示的项目。但是,如果我从这个位置删除该项,则drop方法中的事件将具有保存突出显示项的“item”字段。高亮显示时,树的选择不会更改 我想做的是:我想根据高亮显示的项目更改指针的图像。问题是我不知道如何理解哪一个被突出显示。我的另一个误解是,在Drop方法中,突出显示的项将是Drop的目标(

我在理解用户拖动项目时如何突出显示
TreeViewer
的项目时遇到问题。

事情是这样的:我开始拖动
Treeviewer
中的底部项目,它旁边的项目相应地高亮显示。问题是,我无法从
DragOver
事件中获取突出显示的项目。但是,如果我从这个位置删除该项,则
drop
方法中的事件将具有保存突出显示项的“item”字段。高亮显示时,树的选择不会更改

我想做的是:我想根据高亮显示的项目更改指针的图像。问题是我不知道如何理解哪一个被突出显示。我的另一个误解是,在Drop方法中,突出显示的项将是Drop的目标(在本例中,是顶部的secont字段)。我不想使用
SWT.FULL\u选择

图为:

源代码片段(我想要的是
DragOver
的功能,以防我不直接悬停在某个项目上)


直接从DropTargetEvent.item中获取
树项



如果您将JFace
TreeViewer
与相关的内容和标签提供商一起使用,那么您可以使用,它将负责解决项目。

请发布一些代码,最好是一个。嘿,Martti,感谢您的回复。恐怕没用。“getTargetItem”方法(我想您是想让我使用)返回光标正下方的对象,因此当我不悬停在项目上方时返回null。@user2245164显然,如果您自己创建树项目,并且不在其上设置数据,您就不能使用
ViewerDropAdapter
。不过,您应该能够直接从事件中获取拖动项,
ViewerDropAdapter
内部就是这样做的。
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);
}