【问题标题】:JFace Drag&Drop items highlightJFace 拖放项目突出显示
【发布时间】:2013-09-24 10:12:08
【问题描述】:

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

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

我想要做什么:我想根据突出显示的项目更改指针的图像。问题是我不知道如何理解突出显示的是哪一个。对我来说另一个谜团是,在 Drop 方法中,突出显示的项目将成为放置的目标(在这种情况下,从顶部开始的第二个字段)。我不想使用SWT.FULL_SELECTION

图片如下:

来源 sn-ps(我想要的是 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);
}

【问题讨论】:

  • 请发布一些代码,最好是SSCCE

标签: java drag-and-drop swt jface


【解决方案1】:

直接从DropTargetEvent.item获取TreeItem


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

【讨论】:

  • 嗨 Martti,感谢您的回复。恐怕没有帮助。 “getTargetItem”方法(我假设您打算让我使用)返回光标正下方的对象,因此当我不将鼠标悬停在项目上方时返回 null。
  • @user2245164 显然,如果您自己创建树项目并且不对它们设置数据,则不能使用 ViewerDropAdapter。不过,您应该能够直接从事件中获取拖动项 - 这就是 ViewerDropAdapter 在内部所做的。
猜你喜欢
  • 2010-10-12
  • 2011-10-12
  • 2012-05-19
  • 2011-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多