繁体   English   中英

JFace拖放项目突出显示

[英]JFace Drag&Drop items highlight

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

这是发生的情况:我开始拖动Treeviewer的底部项目,并且其旁边的项目相应地突出显示。 问题是,我无法从DragOver事件中获得突出显示的项目。 但是,如果我从该位置放下该项目,则Drop方法中的事件将使“项目”字段保存突出显示的项目。 突出显示时,树的选择不会更改

我想做什么:我想根据突出显示的项目更改指针的图像。 问题是我不知道该如何突出显示哪一个。 我的另一个困惑是,在Drop方法中,突出显示的项目将成为放置的目标(在这种情况下,从顶部开始是secont Field)。 我不想使用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);
}

直接从DropTargetEvent.item获取TreeItem


如果将JFace TreeViewer与关联的内容和标签提供程序一起使用,则可以使用ViewerDropAdapter ,它可以解决项目。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM