2010-12-22 26 views
11

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.

+0

¿Podría proporcionar un ejemplo completamente autónomo? Gracias por adelantado. – Mot

+0

@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. –

+1

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

Respuesta

0

Esto fue un error en SWT (issue #267381 está relacionado, pero podría no ser el problema real).

Como señaló Mike L. en un comentario, se corrigió en SWT 3.7M4.

2

ya que tienes la línea

dt.addDropListener(new DropTargetAdapter() {

que podría significar la existencia de un error para el desarrollo de aplicaciones Java SWT en Mac OS X (tal vez fijo en una versión publicada más tarde posiblemente?)

se echa un vistazo a la pregunta relacionada stackoverflow lo expresó de otra manera @here

y podría ser exactamente su problema ya presentado como una solicitud de función de error.

+0

Esto no responde a la pregunta, pero desde que dio alguna idea, le he otorgado la recompensa de todos modos. ¡Gracias por tu ayuda! –

+0

de nada. – evandrix