NOTA! Questo sito utilizza i cookie e tecnologie simili.

Se non si modificano le impostazioni del browser, l'utente accetta. Per saperne di piu'

Approvo

Guida Java 2D - Capitolo 47: Implementare il drag-and-drop.

 

Il drag-and-drop ('trascina-e-rilascia') consente di trasferire i dati tra le applicazioni 'al volo', 'trascinandoli' col mouse, senza dover ricorrere alla clipboard del sistema.

 

Il sistema del drag-and-drop è, quindi, un sistema a due vie: è possibile prelevare oggetti da una applicazione o depositarli nella stessa.

 

In questo capitolo vedremo come effettuare entrambe le operazioni, a partire dal rilascio di dati in applicazioni Java.

 

 

NOTA: per implementare il drag-and-drop nei nostri progetti sarà necessario effettuare gli import dei package java.awt.datatransfer.* e java.awt.dnd.* .

 

Per prima cosa bisogna impostare il target di una operazione di rilascio creando un oggetto DropTarget.

 

Un DropTarget è un oggetto che deve essere associato:

  • al componente destinazione vero e proprio (es.: un'area di testo ove ricopiare, appunto, del testo);
  • ad un listener che intercetti l'operazione di rilascio.

 

Costruttori di DropTarget:

  • DropTarget(Component c, DropTargetListener dtl);
  • DropTarget(Component c, int ops, DropTargetListener dtl);
  • DropTarget(Component c, int ops, DropTargetListener dtl, boolean act);
  • DropTarget(Component c, int ops, DropTargetListener dtl, boolean act, FlavorMap fm); .

 

Metodi utili:

  • setActive(boolean isActive)   :   void, che attiva o disattiva la destinazione;
  • setDefaultActions(int ops)   :   void, che imposta le operazioni di rilascio da implementare sulla destinazione, con ops che può assumere uno dei seguenti valori (costanti predefinite della classe DnDConstants, con DnD che sta appunto per 'drag-and-drop'):
ACTION_COPY Copia.
ACTION_MOVE Spostamento.
ACTION_COPY_OR_MOVE Copia o spostamento.
ACTION_LINK Creazione di un link (simbolico).
ACTION_NONE Nessuna azione.

 

Non ci resta quindi che implementare l'interfaccia DropTargetListener, che ci obbliga a riscrivere i seguenti metodi:

dragEnter(DropTargetDragEvent dtde)   :   void Invocato quando il mouse entra in una zona 'rilasciabile'.
dragOver(DropTargetDragEvent dtde)   :   void Invocato quando il mouse si trova in una zona 'rilasciabile'.
dragExit(DropTargetEvent dte)   :   void Invocato quando il mouse esce da una zona 'rilasciabile'.
drop(DropTargetDropEvent dtde)   :   void Invocato quando l'utente rilascia un tasto del mouse.
dropActionChanged(DropTargetDragEvent dtde)   :   void Invocato qualora l'utente 'modifichi il gesto' che ha iniziato l'azione di drag (ad es., prefendo un 'modificatore' come CTRL, ALT, ...).

 

Vediamo adesso come trascinare oggetti prelevandoli da applicazioni Java.

 

Affinchè un componente diventi origine di operazioni di prelievo per il drag-and-drop, dovremo:

  • ottenere un oggetto DragSource mediante il metodo statico:

getDefaultDragSource()   :   DragSource,

che restituisce un oggetto 'origine di drag';

  • configurare l'origine del drag con il metodo:

createDefaultDragGestureRecognizer(Component c, int actions, DragGestureListener dgl)   :   DragGestureRecognizer,

che crea un 'riconoscitore di operazioni di drag' (per intercettare questo tipo di operazioni) associato al component c passato come primo parametro.

 

Dovremo inoltre implementare un particolare listener, DragGestureListener, che ci obbliga a riscrivere il metodo (invocato quando il sistema intercetterà un'operazione di drag):

dragGestureRecognized(DragGestureEvent dge)   :   void

ove definiremo l'oggetto Transferable, target dell'operazione di drag, ed invocheremo il metodo di DragGestureEvent:

startDrag(Cursor dragCursor, Transferable transferable, DragSourceListener dsl)   :   void

che avvia l'operazione di drag.

 

Occorrerà infine implementare, come fatto con DropTargetListener per il rilascio, l'interfaccia DragSourceListener, che ci obbliga a riscrivere i metodi:

dragEnter(DragSourceDragEvent dsde)   :   void Invocato quando il mouse entra in una zona 'trascinabile'.
dragOver(DragSourceDragEvent dsde)   :   void Invocato quando il mouse si trova in una zona 'trascinabile'.
dragExit(DropSourceEvent dte)   :   void Invocato quando il mouse esce da una zona 'trascinabile'.
dragDropEnd(DragSourceDropEvent dsde)   :   void Invocato quando l'utente rilascia un tasto del mouse.
dropActionChanged(DragTargetDragEvent dsde)   :   void Invocato qualora l'utente 'modifichi il gesto' che ha iniziato l'azione di drag (ad es., prefendo un 'modificatore' come CTRL, ALT, ...).

 

 
Vai all'inizio della pagina