Estoy tratando de hacer que sea posible arrastrar archivos desde el Finder a mi aplicación SWT. En Windows y Ubuntu, el siguiente fragmento de código funciona:Arrastrar y soltar no funciona en Mac
public class DndTest {
public static void main(final String[] args) {
final Display display = new Display();
final Shell shell = new Shell(display, SWT.DIALOG_TRIM);
shell.setText("Drag & drop test");
shell.setSize(200, 200);
final FormLayout layout = new FormLayout();
shell.setLayout(layout);
final Label lbl = new Label(shell, SWT.NORMAL);
lbl.setAlignment(SWT.CENTER);
lbl.setText("Drop files here");
final FormData layoutData = new FormData();
layoutData.left = new FormAttachment(50, -100);
layoutData.top = new FormAttachment(50, -15);
layoutData.right = new FormAttachment(50, 100);
layoutData.bottom = new FormAttachment(50, 15);
lbl.setLayoutData(layoutData);
final DropTarget dt = new DropTarget(shell,
DND.DROP_DEFAULT | DND.DROP_MOVE);
final FileTransfer fileTransfer = FileTransfer.getInstance();
dt.setTransfer(new Transfer[] { fileTransfer });
dt.addDropListener(new DropTargetAdapter() {
@Override
public void drop(final DropTargetEvent event) {
System.out.println(event);
String fileList[] = null;
final FileTransfer ft = FileTransfer.getInstance();
if (ft.isSupportedType(event.currentDataType)) {
fileList = (String[]) event.data;
}
for (final String file : fileList) {
System.out.println("- " + file);
}
}
});
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
}
Me da la impresión de que mi solicitud no registra a sí mismo como un destino de colocación en Mac, ya que se cierne archivos a través de él no me da un cursor gota.
Estoy usando el último SWT 3.5 (no puedo usar 3.6 porque para compatibilidad necesito mantener el carbono & Java 1.5).
¿Alguna idea de lo que está mal aquí?
Editar: Revisé el código para que sea un ejemplo completamente incluido. Imprime los nombres sueltos de los archivos en la consola de Windows y Ubuntu, pero no hace nada en Mac.
¿Podría proporcionar un ejemplo completamente autónomo? Gracias por adelantado. – Mot
@mklhmnn He editado el código. Todo lo que necesita hacer es especificar 'import org.eclipse.swt. *'. También tenga en cuenta que estoy usando SWT 3.5. –
Estoy usando SWT 3.7M4 y se imprime el nombre del archivo eliminado. No se muestra un cursor de soltar especial, pero no estoy seguro de cómo se ve en OSX. Sugiero que corrija/solucione su problema de compatibilidad con la última versión de SWT. – Mot