Skip to content

Instantly share code, notes, and snippets.

@markscottwright
Last active September 24, 2021 18:43
Show Gist options
  • Save markscottwright/a5c1cae685f0cf4547700ca81913cced to your computer and use it in GitHub Desktop.
Save markscottwright/a5c1cae685f0cf4547700ca81913cced to your computer and use it in GitHub Desktop.
How to accept dropped files in Java Swing
package scratch;
import java.awt.BorderLayout;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.TransferHandler;
@SuppressWarnings("serial")
public class DropTarget extends JFrame {
private static class DropTargetTransferHandler extends TransferHandler {
@Override
public boolean canImport(TransferSupport support) {
return Arrays.asList(support.getDataFlavors())
.contains(DataFlavor.javaFileListFlavor);
}
@Override
public boolean importData(TransferSupport support) {
try {
System.out.println("importData");
List<File> droppingFiles = (List<File>) support
.getTransferable()
.getTransferData(DataFlavor.javaFileListFlavor);
System.out.println("Importing:" + droppingFiles);
DropTarget target = (DropTarget) support.getComponent();
target.droppedText
.setText(droppingFiles.get(0).getAbsolutePath());
} catch (UnsupportedFlavorException | IOException e) {
e.printStackTrace();
}
return true;
}
}
private TransferHandler transferHandler = new DropTargetTransferHandler();
private JLabel droppedText;
public DropTarget() {
super("Drop Target");
setDefaultCloseOperation(EXIT_ON_CLOSE);
getContentPane().setLayout(new BorderLayout());
droppedText = new JLabel("Drop Stuff Here");
droppedText.setHorizontalAlignment(SwingConstants.CENTER);
getContentPane().add(droppedText, BorderLayout.CENTER);
setSize(400, 400);
setTransferHandler(transferHandler);
}
public static void main(String[] args) {
DropTarget f = new DropTarget();
f.setVisible(true);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment