У меня возникли проблемы с пониманием того, как элемент TreeViewer
подсвечен, когда пользователь перетаскивает элемент.
Элементы перетаскивания JFace выделить
Вот что происходит: я начинаю перетаскивать нижний элемент в пределах Treeviewer
, а элементы рядом с ним выделяют соответственно. Проблема в том, что я не могу получить выделенный объект из события DragOver
. Но если я удалю элемент из этой позиции, событие в методе Drop
будет иметь поле «item», в котором будет выделен выделенный элемент. Выбор дерева не изменяется при возникновении выделения
Что я хочу сделать: Я хочу изменить изображение указателя в соответствии с выделенным элементом. Проблема в том, что я не знаю, как понять, какой из них выделен. Еще одна ошибка для меня заключается в том, что в методе 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);
}
Пожалуйста, разместите код, в идеале, [SSCCE] (http://www.sscce.org). – Baz