//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);
}
}
}