HOY_DragNDrop.java



//EJEMPLO DE ARRASTRAR Y SOLTAR
import java.awt.*;
import java.awt.event.*;
import java.awt.dnd.*;
import java.awt.datatransfer.*;
import java.io.*;

public class DragNDrop extends Frame {
 int screenWidth = 400;
 int screenHeight = 400;
 Panel panel = new Panel();
 Label topLabel = new Label("Introduzca texto en esta area:");
 Label bottomLabel = new Label("Y arrastrelo aqui:");
 TextArea textArea1 = new TextArea();
 TextArea textArea2 = new TextArea();
 
 //Drag and drop variables
 DragSource source = new DragSource();
 DropTarget target = new DropTarget(textArea2,
  DnDConstants.ACTION_COPY,new DropTargetHandler(),true);
 TextTransfer transferable = new TextTransfer();
 DragSourceHandler sourceHandler = new DragSourceHandler();
 
 public static void main(String[] args) {
  DragNDrop app = new DragNDrop();
 }
 public DragNDrop() {
  super("DragNDrop");
  setup();
  setSize(screenWidth,screenHeight);
  addWindowListener(new WindowEventHandler());
  setVisible(true);
 }
 void setup() {
  target.setActive(true);
  panel.setLayout(new GridLayout(4,1));
  panel.add(topLabel);
  panel.add(textArea1);
  Toolkit toolkit=Toolkit.getDefaultToolkit();
  try {
   toolkit.createDragGestureRecognizer(Class.forName(
    "java.awt.dnd.MouseDragGestureRecognizer"),source,textArea1,
    DnDConstants.ACTION_COPY,new DragHandler());
  }catch(ClassNotFoundException ex){
   System.out.println("Recognizer class not found.");
   System.exit(0);
  }
  panel.add(bottomLabel);
  panel.add(textArea2);
  add("Center",panel);
 }
 class DragSourceHandler implements DragSourceListener {
  public void dropActionChanged(DragSourceDragEvent ev) {
   System.out.println("Source: Drop action changed");
  }
  public void dragEnter(DragSourceDragEvent ev) {
   System.out.println("Source: Drag enter");
  }
  public void dragOver(DragSourceDragEvent ev) {
  }
  public void dragExit(DragSourceEvent ev) {
   System.out.println("Source: Drag exit");
 }
  public void dragDropEnd(DragSourceDropEvent ev) {
   System.out.println("Source: Drag drop end");
  }  
 }
 class DropTargetHandler implements DropTargetListener {
  public void dragEnter(DropTargetDragEvent ev) {
   System.out.println ("Target: Drag enter");
   DataFlavor df[] = ev.getCurrentDataFlavors();
   for (int i = 0; i < df.length; i++) {
    if (df[i].equals (DataFlavor.plainTextFlavor) ||
	  df[i].equals (DataFlavor.stringFlavor)) {
     ev.acceptDrag(DnDConstants.ACTION_COPY);
     return;
    }
   }
   ev.rejectDrag();
  }
  public void dragOver(DropTargetDragEvent ev) {
  }
  public void dragExit(DropTargetEvent ev) {
   System.out.println ("Target: Drag exit");
  }
  public void dropActionChanged(DropTargetDragEvent ev) {
   System.out.println("Target: Drop action changed");
  }
  public void drop(DropTargetDropEvent ev) {
   System.out.println ("Target: Dropped");
   ev.acceptDrop (DnDConstants.ACTION_COPY);
   Transferable transfer = ev.getTransferable();
   DataFlavor df[] = ev.getCurrentDataFlavors();
   String input = "";
   try {
    for (int i=0;i<df.length;i++) {
     if (df[i].equals(DataFlavor.stringFlavor) ||
      df[i].equals(DataFlavor.plainTextFlavor)) {
      input = (String) transfer.getTransferData(df[i]);
     }
    }
    textArea2.setText(input);
   }catch (Exception e) {
    System.out.println(e.toString());
   }
   try {
    target.getDropTargetContext().dropComplete(true);
   }catch (Exception e) {
   }
  }
 }
 class TextTransfer implements Transferable {
  public DataFlavor[] getTransferDataFlavors() {
   DataFlavor[] flavors = new DataFlavor[1];
   flavors[0] = DataFlavor.plainTextFlavor;
   return flavors;
  }
  public boolean isDataFlavorSupported(DataFlavor flavor) {
   return (flavor.equals(DataFlavor.plainTextFlavor));
  }
  public Object getTransferData(DataFlavor flavor)
    throws UnsupportedFlavorException, IOException {
   return textArea1.getText();  
  }
 }
 class DragHandler implements DragGestureListener {
  public void dragGestureRecognized(DragGestureEvent e)  {
   e.startDrag(new Cursor(Cursor.HAND_CURSOR),
     transferable,sourceHandler);
  }
 }
 class WindowEventHandler extends WindowAdapter {
  public void windowClosing(WindowEvent e){
   System.exit(0);
  }
 }
}