import java.io.*;
import java.util.*;
import javax.swing.*;
import java.awt.datatransfer.*;
import java.awt.dnd.*;
public class DropDemo extends JFrame {
private JList dropFileList;
public DropDemo() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("DropDemo");
setSize(300, 400);
setLocationRelativeTo(null);
dropFileList = new JList(new DefaultListModel());
dropFileList.setDragEnabled(true);
DropTargetListener dropHandler = new DropTargetAdapter() {
@Override
public void drop(final DropTargetDropEvent e) {
try {
Transferable tr = e.getTransferable();
if (tr.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
e.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
List<File> files = (List) tr.getTransferData(DataFlavor.javaFileListFlavor);
for (File file : files) {
if (file.isFile()) {
((DefaultListModel) dropFileList.getModel()).addElement("<file> " + file.getName());
}
}
e.getDropTargetContext().dropComplete(true);
} else {
System.err.println("DataFlavor.javaFileListFlavor is not supported, rejected");
e.rejectDrop();
}
} catch (IOException ex) {
System.err.println("IOException");
ex.printStackTrace();
e.rejectDrop();
} catch (UnsupportedFlavorException ex) {
System.err.println("UnsupportedFlavorException");
ex.printStackTrace();
e.rejectDrop();
}
}
};
//connect dropHandler to dropFileList:
new DropTarget(dropFileList, dropHandler);
add(new JScrollPane(dropFileList));
}
public static void main(final String[] args) {
Runnable gui = new Runnable() {
@Override
public void run() {
new DropDemo().setVisible(true);
}
};
SwingUtilities.invokeLater(gui);
}
}