InicioHazlo Tu MismoArrastrar y tirar archivos en java swing (Dragg´nDrop)

Arrastrar y tirar archivos en java swing (Dragg´nDrop)

Hazlo Tu Mismo2/24/2013



Javafilos taringueros de America y del Mundo, sean bienvenidos a este nuevo aporte!!!



Una necesidad básica en algunas aplicaciones es el manejo de ficheros por parte del usuario, usualmente en java usamos una instancia de JFileChooser , el cual es un componente swing que nos permite seleccionar archivos desde una ventana especializada para ello...

Ahora bien, y deseamos que nuestro usuario tenga la posibilidad de arrastrar y soltar ficheros dentro de nuestra aplicación...?
Pues para eso se pódria (dependiendo de nuestro nivel y/o conocimientos sobre java) crear una clase, pero como mi nivel de conocimiento sobre java aún es bastante pobre, al una vez necesitar de esto, y tras haberle preguntado al tio Google, encontré una página donde se publicaba la clase que aquí usaremos como ejemplo con el fin de permitirle a nuestro usuario arrastrar y soltar archivos en nuestra aplicación para mostrar los datos en un JTextArea.




Pagina oficial del proyecto:




Traducción de las las plabras del autor de la clase FileDrop.java:


Ahora es compatible con Linux KDE / Gnome gracias a Nathan Blomquist.

Esta clase hace que sea fácil de arrastrar y soltar los archivos desde el sistema operativo a un programa Java. Se puden soltar archivos sobtre cualquier java.awt.Component pero sólo los javax.swing.JComponent indican el evento de colocación cambiando el borde.
Para utilizar esta clase, construya un nuevo FileDrop pasando el componente de destino y un oyente para recibir una notificación cuando el/los archivo/s han sido soltados.

Aquí está un ejemplo:

Tenga en cuenta que algunos sistemas operativos y combinaciones de máquinas virtuales Java no soportan el arrastrado y tirado de archivos. Si usted está en uno de estos sistemas, pues tienes poca suerte. Lo siento.

JPanel myPanel = new JPanel ();
new FileDrop ( myPanel , new FileDrop.Listener ()
{ public void filesDropped ( java.io.File [] files )
{
// Aqui puedes manipular las soltadas
...
} // fin filesDropped
} ) ; // fin FileDrop.Listener

Se puede especificar el borde que aparecerá cuando los archivos están siendo arrastrados por una llamada al constructor con un javax.swing.border.Border.
Sólo los JComponent´s mostrarán ninguna indicación con un borde.
Puede activar algunas funciones de depuración pasando un objeto PrintStream (como System.out) en el constructor completo.
Un valor nulo dará lugar a ninguna información de depuración adicional está emitiendo.
Al ejecutar el Ejemplo La clase FileDrop tiene una demo integrada que se puede ejecutar en cualquiera de las siguientes maneras: Haga doble clic en el archivo filedrop.jar.
En el símbolo del sistema, escriba java-jar filedrop.jar.
Con filedrop.jar entrar en la ruta de clase Ejemplo java.

Nota adicional He condensado toda la funcionalidad en una clase FileDrop.java para que sea más fácil copiar el archivo solo en sus proyectos.
Dado que este es de dominio público, no hay necesidad de incluir otro archivo jar en el proyecto y hacer referencia a una licencia - sólo tiene que añadir a su paquete FileDrop.java y ya está!

Una cosa más:

ya que es de dominio público, no dudes en cambiar el nombre del paquete Java si te hace la vida un poco más fácil.

Una nota acerca de Dominio Público:

He publicado este software en el dominio público. Eso significa que usted puede hacer lo que quiera con él.
En serio.
Usted no tiene que coincidir con cualquier otra licencia de código abierto; sólo lo utilizan.

Puede cambiar el nombre de los archivos, mover los paquetes de Java, lo que quieras.

Si sus abogados dicen que usted tiene que tener una licencia, ponerse en contacto conmigo, y voy a hacer una versión especial para usted bajo cualquier licencia que desee razonable: MIT, BSD, GPL, lo que sea.




Un genio el flaco eh???!!!

Descarga de archivo filedrop-1.1.zip incluyendo código fuente completo y ejecutable de aplicación de ejemplo:




Aquí les dejo el código de ejemplo que realicé yo para este post, para usar esta clase en su proyecto solo deben agregarla en el package:

java


/*
 * @author
 * Jorge González
 * [email protected]
 * T! @diazespina
 */

//Clase principal ("hereda" de JFrame)
public class DropFrame extends javax.swing.JFrame {
    //Variable de tipo JTextArea

    javax.swing.JTextArea text;

    //"Constructor" de la clase
    public DropFrame() {
        inicio();
    }

    //Método para "llamar" en el constructor
    private void inicio() {
        //Instancia del TextArea y agregado al JFrame
        text = new javax.swing.JTextArea();
        getContentPane().add(text);
        //Tamaño, operación de botón cerrar y centrado del JFrame
        setSize(500, 400);
        setDefaultCloseOperation(3);
        setLocationRelativeTo(null);
        /*
         * "Instancia" de la clase FileDrop la cual recibe como parámetros un
         * componente de tipo awt o swing y una instancia "anonima" a una clase
         * que implementa métodos que sirven de "Listener" para nuestro
         * componente, la instancia de esta clase nos obliga a sobreescribir uno
         * de sus métodos, en este caso uno que almacena los archivos
         * arrastrados en un "vector" de tipo "File"
         */
        FileDrop fileDrop = new FileDrop(text, new FileDrop.Listener() {

            @Override
            public void filesDropped(java.io.File[] files) {
                
                /*
                 * Con un simple bucle mostramos en el JTextArea lo que allí
                 * halla mas cada archivo almacenado en el vector files
                 * mediante toString()
                 */

                for (java.io.File f : files) {
                    text.setText(text.getText() + "n" + f.toString());
                }

            }
        });

    }

   
//Método "principal"
    public static void main(String[] args) {
        
     /*Nueva instancia de nuestra clase pública DropFrame
      * que al heredar de JFrame nos permite ya mismo hacerla visible
      */
        new DropFrame().setVisible(true);
    }
}



Espero que les sea de útilidad y que lo disfruten!!!

Recuerden que dentro del .zip hay otro ejemplo ya compilado y con su fuente.


Como siempre gracias x la visita, dudas, comentarios, criticas y/o puntos agadecidos y bienvenidos!!!
Datos archivados del Taringa! original
45puntos
737visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
10visitas
0comentarios
Dar puntos:

Dejá tu comentario

0/2000

Autor del Post

d
diazespina🇦🇷
Usuario
Puntos0
Posts52
Ver perfil →
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.