import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.dnd.DnDConstants;
import java.awt.dnd.DropTarget;
import java.awt.dnd.DropTargetDragEvent;
import java.awt.dnd.DropTargetDropEvent;
import java.awt.dnd.DropTargetEvent;
import java.awt.dnd.DropTargetListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;
public class DropTest extends JFrame implements DropTargetListener {
DropTarget dt;
JTextArea ta;
public DropTest() {
super("Drop Test");
setSize(300, 300);
getContentPane().add(
new JLabel("Drop a list from your file chooser here:"),
BorderLayout.NORTH);
ta = new JTextArea();
ta.setBackground(Color.white);
getContentPane().add(ta, BorderLayout.CENTER);
// Set up our text area to recieve drops...
// This class will handle drop events
dt = new DropTarget(ta, this);
setVisible(true);
}
public void dragEnter(DropTargetDragEvent dtde) {
System.out.println("Drag Enter");
}
public void dragExit(DropTargetEvent dte) {
System.out.println("Source: " + dte.getSource());
System.out.println("Drag Exit");
}
public void dragOver(DropTargetDragEvent dtde) {
System.out.println("Drag Over");
}
public void dropActionChanged(DropTargetDragEvent dtde) {
System.out.println("Drop Action Changed");
}
public void drop(DropTargetDropEvent dtde) {
try {
// Ok, get the dropped object and try to figure out what it is
Transferable tr = dtde.getTransferable();
DataFlavor[] flavors = tr.getTransferDataFlavors();
for (int i = 0; i < flavors.length; i++) {
System.out.println("Possible flavor: "
+ flavors[i].getMimeType());
// Check for file lists specifically
if (flavors[i].isFlavorJavaFileListType()) {
// Great! Accept copy drops...
dtde.acceptDrop(DnDConstants.ACTION_COPY);
ta.setText("Successful file list drop.\n\n");
// And add the list of file names to our text area
java.util.List list = (java.util.List) tr
.getTransferData(flavors[i]);
for (int j = 0; j < list.size(); j++) {
ta.append(list.get(j) + "\n");
}
// If we made it this far, everything worked.
dtde.dropComplete(true);
return;
}
}
// Hmm, the user must not have dropped a file list
System.out.println("Drop failed: " + dtde);
dtde.rejectDrop();
} catch (Exception e) {
e.printStackTrace();
dtde.rejectDrop();
}
}
public static void main(String args[]) {
new DropTest();
}
}
第二个例子代码:
public class DropTest extends JFrame{
DropTarget dt;
JTextArea ta;
public DropTest(){
super("Drop Test");
this.setBounds(300,300,600,400);
getContentPane().add(new JLabel("Drop a list from your file chooser here:"),BorderLayout.NORTH);
ta = new JTextArea();
ta.setBackground(Color.white);
dt = new DropTarget(ta,new Mylistener());
JScrollPane jpane = new JScrollPane(ta);
getContentPane().add(jpane,BorderLayout.CENTER);
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
setVisible(true);
}
class Mylistener extends DropTargetAdapter{
public void drop(DropTargetDropEvent dtde){
try{
// Ok, get the dropped object and try to figure out what it is
Transferable tr = dtde.getTransferable();
DataFlavor[] flavors = tr.getTransferDataFlavors();
for(int i = 0;i < flavors.length;i++){
System.out.println("Possible flavor: " + flavors[i].getMimeType());
// Check for file lists specifically
if(flavors[i].isFlavorJavaFileListType()){
// Great! Accept copy drops...
dtde.acceptDrop(DnDConstants.ACTION_COPY);
ta.setText("Successful file list drop.\n");
// And add the list of file names to our text area
java.util.List list = (java.util.List) tr.getTransferData(flavors[i]);
for(int j = 0;j < list.size();j++){
ta.append(list.get(j) + "\n");
appendText((File)list.get(j));
}
// If we made it this far, everything worked.
dtde.dropComplete(true);
return;
}
}
// Hmm, the user must not have dropped a file list
System.out.println("Drop failed: " + dtde);
dtde.rejectDrop();
}catch(Exception e){
e.printStackTrace();
dtde.rejectDrop();
}
}
}
private void appendText(File file){
if(file.getAbsolutePath().lastIndexOf(".txt") != -1){
BufferedReader br = null;
InputStreamReader isr = null;
if(!file.exists()) return;
String lineStr = null;
try{
isr = new FileReader(file);
br = new BufferedReader(isr);
while((lineStr = br.readLine()) != null){
ta.append(lineStr+"\n");
}
}catch(Exception e){
e.printStackTrace();
}finally{
if(br != null) try{
br.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
}
public static void main(String args[]){
new DropTest();
}
}
我的例子截图: