gpt4 book ai didi

java - SWT列表拖放: Get element at drop location

转载 作者:行者123 更新时间:2023-12-01 22:31:50 25 4
gpt4 key购买 nike

您好,我有一个 SWT 列表,我希望能够通过拖放来更改列表中项目的顺序。我有部分实现的代码。我不确定如何获取发生放置的元素,即获取释放拖动的项目的项目(以便我可以将其与拖动的项目交换)。这是我到目前为止的代码:

    listComposite = new Composite(parent, SWT.NONE);
documentList = new List(listComposite, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
Transfer[] types = new Transfer[] { TextTransfer.getInstance() };
DragSource source = new DragSource(documentList, DND.DROP_MOVE | DND.DROP_COPY);
source.setTransfer(types);

source.addDragListener(new DragSourceAdapter()
{
@Override
public void dragSetData(DragSourceEvent event)
{
// Get the selected items in the drag source
DragSource ds = (DragSource) event.widget;
List list = (List) ds.getControl();
String[] selection = list.getSelection();
event.data = selection[0];
}
});
DropTarget target = new DropTarget(documentList, DND.DROP_MOVE | DND.DROP_COPY
| DND.DROP_DEFAULT);
target.setTransfer(types);
target.addDropListener(new DropTargetAdapter()
{
@Override
public void dragEnter(DropTargetEvent event)
{
if (event.detail == DND.DROP_DEFAULT)
{
event.detail = (event.operations & DND.DROP_COPY) != 0 ? DND.DROP_COPY
: DND.DROP_NONE;
}

// Allow dropping text only
for (int i = 0, n = event.dataTypes.length; i < n; i++)
{
if (TextTransfer.getInstance().isSupportedType(event.dataTypes[i]))
{
event.currentDataType = event.dataTypes[i];
}
}
}

@Override
public void dragOver(DropTargetEvent event)
{
event.feedback = DND.FEEDBACK_SELECT | DND.FEEDBACK_SCROLL;
}

@Override
public void drop(DropTargetEvent event)
{
if (TextTransfer.getInstance().isSupportedType(event.currentDataType))
{
//HELP: How to get the element were the drop occurs and swap it with the draged element.
}
}
});

最佳答案

让这个东西发挥作用。可能不是最好的解决方案,但这就是我想出的。

@Override
public void drop(DropTargetEvent event)
{
String sourceItemIndex = (String) event.data;
String targetItemIndex = null;
if (TextTransfer.getInstance().isSupportedType(event.currentDataType))
{
int dropYCordinate = event.y
- documentList.toDisplay(documentList.getLocation()).y;
int itemTop = 0;
// Search for the item index where the drop took place
for (int i = 0; i < documentList.getItemCount(); i++)
{

if (dropYCordinate >= itemTop
&& dropYCordinate <= itemTop + documentList.getItemHeight())
{
targetItemIndex = documentList.getTopIndex() + i + "";
}
itemTop += documentList.getItemHeight();
}
}
swapListItems(Integer.parseInt(sourceItemIndex), Integer.parseInt(targetItemIndex));
}
});

基本上,我获取了项目掉落点的 Y 坐标,并检查与该 Y 坐标重叠的项目。一旦获得目标,我所需要做的就是切换源和目标项。希望这可以帮助尝试做类似事情的人。

关于java - SWT列表拖放: Get element at drop location,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27609231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com