import java.awt.*;
import java.awt.event.*;
import java.awt.datatransfer.*;
import java.awt.dnd.*;
import java.io.*;
import javax.swing.*;
public class SwingDrop {
static JTextArea textArea;
public static void main(String[] args) {
JFrame frame = new JFrame("Drop on Me!");
textArea = new JTextArea(20, 40);
textArea.setLineWrap(true);
JScrollPane scroller = new JScrollPane(textArea);
frame.setContentPane(scroller);
textArea.setDropTarget(new DropTarget(textArea, new TextAreaTarget(textArea)));
frame.pack();
frame.show();
}
}
class TextAreaTarget implements DropTargetListener {
JTextArea textArea;
public TextAreaTarget(JTextArea area) {
textArea = area;
}
public void dragEnter(DropTargetDragEvent e) {
System.err.println("[Target] dragEnter");
e.acceptDrag(DnDConstants.ACTION_COPY);
}
public void dragOver(DropTargetDragEvent e) {
e.acceptDrag(DnDConstants.ACTION_COPY);
System.err.println("[Target] dragOver");
}
public void dragExit(DropTargetEvent e) {
System.err.println("[Target] dragExit");
}
public void drop(DropTargetDropEvent e) {
System.err.println("[Target] drop");
DropTargetContext targetContext = e.getDropTargetContext();
boolean outcome = false;
if ((e.getSourceActions() & DnDConstants.ACTION_COPY) != 0)
e.acceptDrop(DnDConstants.ACTION_COPY);
else {
e.rejectDrop();
return;
}
DataFlavor[] dataFlavors = e.getCurrentDataFlavors();
DataFlavor transferDataFlavor = null;
System.err.println(DataFlavor.plainTextFlavor.getMimeType());
for (int i = 0; i < dataFlavors.length; i++) {
System.err.println(dataFlavors[i].getMimeType());
if (DataFlavor.plainTextFlavor.equals(dataFlavors[i])) {
System.err.println("matched");
transferDataFlavor = dataFlavors[i];
break;
}
}
if (transferDataFlavor != null) {
Transferable t = e.getTransferable();
InputStream is = null;
try {
System.err.println("get stream");
is = (InputStream)t.getTransferData(transferDataFlavor);
} catch (IOException ioe) {
ioe.printStackTrace();
System.err.println(ioe.getMessage());
targetContext.dropComplete(false);
return;
} catch (UnsupportedFlavorException ufe) {
ufe.printStackTrace();
System.err.println(ufe.getMessage());
targetContext.dropComplete(false);
return;
}
if (is != null) {
try {
Reader converter = new InputStreamReader(is);
StringWriter sWriter = new StringWriter();
boolean more = true;
while (more) {
int c = converter.read();
if (c != -1) {
sWriter.write(c);
} else {
more = false;
}
}
textArea.append(sWriter.toString().trim());
outcome = true;
} catch (Exception ex) {
ex.printStackTrace();
System.err.println(ex.getMessage());
targetContext.dropComplete(false);
return;
}
} else
outcome = false;
}
targetContext.dropComplete(outcome);
}
public void dragScroll(DropTargetDragEvent e) {
}
public void dropActionChanged(DropTargetDragEvent e) {
System.err.println("[Target] dropActionChanged");
}
}
|