Wie kann ich es realisieren, dass ich eine Datei in ein Fenster hineinziehe, damit ich von dieser den Pfad herausfinden kann
List<File> dropppedFiles = (List<File>)transferable.getTransferData(DataFlavor.javaFileListFlavor)
JTextArea myPanel = new JTextArea();
myPanel.setDropTarget(new DropTarget() {
public synchronized void drop(DropTargetDropEvent evt) {
try {
evt.acceptDrop(DnDConstants.ACTION_COPY);
List<File> droppedFiles = (List<File>)
evt.getTransferable().getTransferData(DataFlavor.javaFileListFlavor);
for (File file : droppedFiles) {
// process files
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
evt.getTransferable().getTransferData(DataFlavor.javaFileListFlavor);
import java.awt.datatransfer.*;
import java.awt.dnd.*;
import java.io.*;
import java.util.*;
import javax.swing.*;
public class Test {
public void run() {
DefaultListModel<File> listModel = new DefaultListModel<>();
JList<File> fileList = new JList<>(listModel);
JLabel dropArea = new JLabel("Datei hier ablegen", JLabel.CENTER);
dropArea.setDropTarget(new DropTarget(dropArea, new DropTargetAdapter() {
@Override
public void drop(DropTargetDropEvent event) {
try {
Transferable tr = event.getTransferable();
if (tr.isDataFlavorSupported (DataFlavor.javaFileListFlavor)) {
event.acceptDrop(DnDConstants.ACTION_COPY);
List<File> data = getFileList(tr);
data.forEach(f -> listModel.addElement(f));
event.getDropTargetContext().dropComplete(true);
} else {
event.rejectDrop();
}
} catch (UnsupportedFlavorException | IOException ex) {
ex.printStackTrace();
event.rejectDrop();
}
}
@SuppressWarnings("unchecked")
private List<File> getFileList(Transferable tr) throws UnsupportedFlavorException, IOException {
return (List<File>) tr.getTransferData(DataFlavor.javaFileListFlavor);
}
}));
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.add(dropArea);
frame.add(new JScrollPane(fileList), java.awt.BorderLayout.SOUTH);
frame.setSize(800, 600);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new Test().run());
}
}