Arrastra a ese malvado JLabel!

Esto es un ejemplo de un simple drag ‘n drop usando un JLabel. El resultado es que se podrá arrastrar el JLabel hacia un componente editable y el texto se ingresará en dicho componente al soltar el click.

Para lograrlo debemos usar algunos pasos sencillos. Lo primero es definir el componente en el que vamos a hacer el drop, para el efecto de este ejemplo usaremos un simple JTextField. Lo único que debemos hacer a este JTextfield es habilitar su capacidad de ser un blanco de Drop. Para esto usamos el método setDragEnabled(true);


JTextField txttarget = new JTextField();

target.setDragEnabled(true);

El siguiente paso es crear un objeto TransferHandler. Este controla la transferencia de información entre un componente y otro en el drag ‘n drop. En pocas palabras, es el que va a definir qué ocurrirá cuando el drag ‘n drop se realice. Para esto creamos el objeto poniendo como parámetro “text”, que define que lo que se transferirá del JLabel será su texto.


JLabel label = new JLabel("Drag me!");

label.setTransferHandler(new TransferHandler("text"));

Ahora para efectuar en verdad el drag ‘n drop debemos crear un adaptador de mouse para el label, lo podemos definir al llamar a la función o por separado. En esto caso lo haré implícitamente. Lo que se debe hacer es obtener el componente, obtener su TransferHandler, y luego hacer que el mismo realice la acción de drag. Esto se logra del siguiente modo:


label.addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent e)
{
JComponent comp = (JComponent)e.getSource();
TransferHandler th = comp.getTransferHandler();
th.exportAsDrag(comp, e, TransferHandler.COPY);
}
 });

El método exportAsDrag tiene como parámetros el componente, el evento de mouse y el modo de realizar el Drag. En este caso hemos especificado Copiar, pero TransferHandler tiene otros campos final como MOVE y COPY_OR_MOVE, que pueden ser usadas también.

Con esto, nuestro sencillo Drag ‘n Drop está Listo.

Responder

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