package de.tutorials;
import java.awt.BorderLayout;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.dnd.DnDConstants;
import java.awt.dnd.DropTarget;
import java.awt.dnd.DropTargetAdapter;
import java.awt.dnd.DropTargetDropEvent;
import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;
public class DropDemo extends JFrame {
private DefaultListModel listModel;
public DropDemo() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("DropDemo listing");
setSize(300, 400);
setLocationRelativeTo(null);
initCenter( );
}
private void initCenter() {
listModel = new DefaultListModel( );
JList dropFileList = new JList(listModel);
dropFileList.setDragEnabled(true);
DropTarget dropTarget = new DropTarget(dropFileList,
new FileDropTargetListener( ));
add(dropFileList, BorderLayout.CENTER);
}
private class FileDropTargetListener extends DropTargetAdapter {
@Override
public void drop(DropTargetDropEvent evt) {
final Transferable transferable = evt.getTransferable( );
DataFlavor flavor = new DataFlavor(String.class,
"text/uri-list; class=java.lang.String");
if (transferable.isDataFlavorSupported(flavor)) {
evt.acceptDrop(DnDConstants.ACTION_LINK);
try {
String transferData = (String) transferable
.getTransferData(flavor);
URL url = new URL(transferData);
File file = new File(url.toURI( ));
System.out.println(file.getAbsolutePath( ));
listModel.addElement(file.getAbsolutePath( ));
// Fertig
evt.getDropTargetContext( ).dropComplete(true);
}
catch (UnsupportedFlavorException e) {
e.printStackTrace( );
evt.rejectDrop( );
}
catch (IOException e) {
e.printStackTrace( );
evt.rejectDrop( );
}
catch (URISyntaxException e) {
e.printStackTrace( );
evt.rejectDrop( );
}
}
else {
System.out.println("Flavor " + flavor + " not supported");
evt.rejectDrop( );
}
}
}
public static void main(String[] args) {
DropDemo wnd = new DropDemo( );
wnd.setVisible(true);
}
}