JavaFX Drag and Drop – Ejemplo (Arrastrar y Soltar)

JavaFX Drag and DropCon la inquietud de implementar una pequeña aplicación que permita copiar archivos con solo arrastrar y soltar directamente en la escena con JavaFX, me encontré con este código Demo disponible un repositorio de appspot.com http://www.ex-javamonday.appspot.com/Code/Java/JavaFX/Demonstratesadraganddropfeature.htm 

A mi escena agregué solo 2 elementos: ListView y Label, por ahora el ListView no muestra ninguna lista, solo se queda vacía para poder realizar el Drag and Drop.

Diseño de la aplicación.

En el código se agregó el EventHandler como en el ejemplo mencionado, pero se agregó un nuevo método encargado de realizar la copia del archivo a la carpeta de la aplicación.

Método para copiar archivo se obtuvo del libro titulado Java I/O de O’Reilly.

    private static void copyFile(File inFile, File outFile) throws IOException {
        if (inFile.getCanonicalPath().equals(outFile.getCanonicalPath())) {
            // inFile and outFile are the same;
            // hence no copying is required.
            return;
        }
        InputStream in = null;
        OutputStream out = null;
        try {
            in = new BufferedInputStream(new FileInputStream(inFile));
            out = new BufferedOutputStream(new FileOutputStream(outFile));
            for (int c = in.read(); c != -1; c = in.read()) {
                out.write(c);
            }
        } finally {
            if (in != null) {
                in.close();
            }
            if (out != null) {
                out.close();
            }
        }
    }

El evento en el ListView que controla la acción soltar (Drop) realiza el llamado al método copy(…)

lista.setOnDragDropped(new EventHandler <DragEvent>() {
            @Override
            public void handle(DragEvent event) {
                /* data dropped */
                System.out.println(“onDragDropped”);
                /* if there is a File data on dragboard, read it and use it */
                Dragboard db = event.getDragboard();
                boolean success = false;
                if (db.hasFiles()) {
                    //archivoTextView.setText(db.getFiles().get(0).getPath());
                    try {
                        //Copy file to the local App directory /
                        copyFile(db.getFiles().get(0), new File(“” + db.getFiles().get(0).getName() ));
                    } catch (IOException ex) {
                        Logger.getLogger(MainController.class.getName()).log(Level.SEVERE, null, ex);
                    }
                    success = true;
                }
                /* let the source know whether the File was successfully
                 * transferred and used */
                event.setDropCompleted(success);
                event.consume();
            }
        });

El resultado final de la aplicación.

JavaFX Drag and Drop

Al soltar el archivo, este es copiado a la carpeta de la aplicación conservando el nombre.

Descarga el código fuente en GDrive.

Anuncios

Escribe tu comentario:

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s