miércoles, 19 de agosto de 2009

Drag and drop en Java

Para poder desarrollar Drag and Drop (D&D) en Java 2 se utilizan las clases que estan en el package java.awt.dnd.


En primer lugar se necesita un componente GUI que representa la fuente de los datos de la operacion D&D y que mantenga la asociacion con un objeto java.awt.dnd.DropSource.


En segundo lugar se necesita otro componente GIU que representa el destino de los datos de la operacion D&D y que mantenga la asociacion con un objeto java.awt.dnd.DropTarget.


Finalmente necesitamos un objeto java.awt.datatransfer.Transferable que encapsula los datos transferidos entre los objetos DragSource y DropTarget.





Cuando un objeto Transferable encapsula datos, eso hace disponible en el objeto DropTarget un objeto DataFlavors. Para tranferencias locales en la misma maquina virtual de Java (JVM), Transferable provee una referencia a un objeto.


Cuando invocamos una operacion D&D posiblemente requiramos de varios tipos de acciones D&D. La clase DnDConstants define los tipos de acciones soportadas:



  • ACTION_NONE -- No se toma ninguna accion

  • ACTION_COPY -- Deja los datos en el DragSource intactos

  • ACTION_MOVE -- Los datos en el DragSource se eliminan cuando se completa exitosamente la operacion D&D.

  • ACTION_COPY o ACTION_MOVE -- Se ejecuta en el DragSource la operacion requerida por el DropTarget

  • ACTION_LINK o ACTION_REFERENCE -- Cualquier cambio de datos en la fuente o en el destino se propaga en la otra ubicacion.

Creando un componente draggable (Arrastrable)


Para que un componente pueda actuar como una fuente de una operacion D&D debe asociarse con cinco objetos



  • java.awt.dnd.DragSource

  • java.awt.dnd.DragGestureRecognizer

  • java.awt.dnd.DragGestureListener

  • java.awt.datatransfer.Transferable

  • java.awt.dnd.DragSourceListener


El DragSource

Una forma comun de obtener un objeto DragSource es usando una instancia por JVM. Con el metodo de clase DragSource.getDefaultDragSource obtendremos un objeto compartido DragSource que es usado por el tiempo de vida de la JVM. Otra opcion es proveer un DragSource por cada instancia de una clase Component class. Con esta opcion tu eres definir la implementacion.

El DragGestureRecognizer

Las gestiones que inician la operacion D&D varian dependiendo del componente, plataforma y dispositivo

Por ejemplo en windows las gestiones son las siguientes:

  • Move: Clic con el boton izquierdo del raton
  • Copy: CTRL + Boton izquierdo del raton
  • Link: Shift + Boton izquierdo del raton

Un DragGestureRecognizer encapsula estos detalles de implementacion. The instance method dragSource.crecapsula ateDefaultDragGestureRecognizer() will obtain a recognizer and associate it with a component, action, and DragGestureListener

1 comentario:

Arturo.Reynoso dijo...

Y los otros 3 objetos luigui ?