我应该在网格小部件上实现拖放功能......我发现了监听器“DragdetectListener”,但我不知道如何找到目标(这是我必须释放该行的位置)。有些想法?我不能使用表我必须使用swt网格。更清楚: 我有一个有n行的网格,应该将其中一行拖到另外两行之间。在这一点上,我应该知道我移动的线(这不是问题),第二条线(在上面两个之间)。我怎样才能获得第二条线?谢谢大家的帮助。
答案 0 :(得分:1)
拖放应该包含两个侦听器。 一个在开始拖动的组件上,另一个在组件上放置拖放。
source.addDragListener(new DragSourceListener() {
public void dragStart(DragSourceEvent event) {
// Only start the drag if needed
if (iDoNotNeedToStartTheDrag) {
event.doit = false;
}
}
public void dragSetData(DragSourceEvent event) {
// Provide the data of the requested type.
if (TextTransfer.getInstance().isSupportedType(event.dataType)) {
event.data = "the data to transfert";
}
}
public void dragFinished(DragSourceEvent event) {
// At the end of the drag, if we need to do something on the source
}
});
然后在目标上:
target.addDropListener(new DropTargetListener() {
public void dragEnter(DropTargetEvent event) {
}
public void dragOver(DropTargetEvent event) {
}
public void dragOperationChanged(DropTargetEvent event) {
}
public void dragLeave(DropTargetEvent event) {
}
public void dropAccept(DropTargetEvent event) {
}
public void drop(DropTargetEvent event) {
// do what ever you want...
if (textTransfer.isSupportedType(event.currentDataType)) {
String text = (String)event.data;
TableItem item = new TableItem(dropTable, SWT.NONE);
item.setText(text);
}
if (fileTransfer.isSupportedType(event.currentDataType)){
String[] files = (String[])event.data;
for (int i = 0; i < files.length; i++) {
TableItem item = new TableItem(dropTable, SWT.NONE);
item.setText(files[i]);
}
}
}
});