0
我應該實現拖放到網格窗口小部件上的功能...我找到了監聽器「DragdetectListener」,但我不知道如何找到目標(這是我必須發佈的目標線)。一些想法?我不能使用表格,我必須使用swt網格。更清楚: 我有一個n行的網格,應該在其他兩行之間拖動它們之一。在這一點上,我應該知道我已經移動的線(這不是問題),以及第二條線(上述兩條線之間)。我如何獲得第二條線?謝謝大家的幫助。在SWT Grid上拖放
我應該實現拖放到網格窗口小部件上的功能...我找到了監聽器「DragdetectListener」,但我不知道如何找到目標(這是我必須發佈的目標線)。一些想法?我不能使用表格,我必須使用swt網格。更清楚: 我有一個n行的網格,應該在其他兩行之間拖動它們之一。在這一點上,我應該知道我已經移動的線(這不是問題),以及第二條線(上述兩條線之間)。我如何獲得第二條線?謝謝大家的幫助。在SWT Grid上拖放
拖放應該涉及兩個監聽器。 一個用於啓動拖動的組件,另一個用於完成拖放的組件。
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]);
}
}
}
});
完美,非常感謝。 –
我找不到在默認的SWT窗口小部件設置一個'Grid'部件。你是指[星雲網格](https://eclipse.org/nebula/widgets/grid/grid.php)? – Baz
這篇文章解釋了DnD如何在SWT中工作:https://eclipse.org/articles/Article-SWT-DND/DND-in-SWT.html –
@AndreaVicari如果您覺得答案可以解決問題,請標記點擊綠色複選標記即可「接受」。這有助於將重點放在仍然沒有答案的舊帖子上。 –