Hallo,
ich habe einen JFrame mit mehreren Komponenten, unter anderem eine jTextArea und eine JList. Beide Komponenten sollen Dateien vom Explorer (oder ähnliches) per Drag&Drop empfangen dürfen.
Bisher klappt es für die jTextArea wunderbar. Aber wie kann ich gleichzeitig die JList als drop-Ziel zulassen und prüfen, auf welche Komponente die Dateien gedroppt wurden? Siehe großen Kommentar im Quelltext unten:
Weiß jemand weiter?
Gruß
Daniel
ich habe einen JFrame mit mehreren Komponenten, unter anderem eine jTextArea und eine JList. Beide Komponenten sollen Dateien vom Explorer (oder ähnliches) per Drag&Drop empfangen dürfen.
Bisher klappt es für die jTextArea wunderbar. Aber wie kann ich gleichzeitig die JList als drop-Ziel zulassen und prüfen, auf welche Komponente die Dateien gedroppt wurden? Siehe großen Kommentar im Quelltext unten:
Java:
public class NewEntryFrame extends javax.swing.JFrame implements WindowListener, DropTargetListener {
private void initKram() {
jTextAreaEntry.setDragEnabled(true);
DropTarget dropTarget = new DropTarget(jTextAreaEntry, this);
// droptarget wird nicht weiter verwendet, ist aber nötig, damit drag&drop funktioniert?
}
@Override
public void dragEnter(DropTargetDragEvent dtde) {
}
@Override
public void dragOver(DropTargetDragEvent dtde) {
}
@Override
public void dropActionChanged(DropTargetDragEvent dtde) {
}
@Override
public void dragExit(DropTargetEvent dte) {
}
@Override
public void drop(DropTargetDropEvent dtde) {
// get transferable
Transferable tr = dtde.getTransferable();
try {
// check whether we have files dropped into textarea
if (tr.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
// drag&drop was link action
dtde.acceptDrop(DnDConstants.ACTION_LINK);
// retrieve list of dropped files
java.util.List files = (java.util.List)tr.getTransferData(DataFlavor.javaFileListFlavor);
// check for valid values
if (files!=null && files.size()>0) {
// create list with final image files
List<File> imgfiles = new ArrayList<File>();
// create list with all dropped files
List<File> anyfiles = new ArrayList<File>();
// dummy
File file;
// iterate droplist
for (int i = 0; i < files.size(); i++) {
// get each single object from droplist
file = (File) files.get(i);
// check whether it is a file
if (file.isFile()) {
// if so, add it to list
anyfiles.add(file);
// if it's an image, add it to image file list
if (Tools.isImageFile(file)) imgfiles.add(file);
}
}
//
// AN DIESER STELLE PRÜFEN, OB DIE DATEIEN AUF DIE JTEXTAREA
// ODER DIE JLIST GEDROPPED WURDEN!
//
// insertImages nur aufrufen, wenn jTextArea drop-ziel war
// insertAttachments nur aufrufen, wenn jList drop-ziel war
//
// check if we have any valid values,
// i.e. image files have been dragged and dropped
// if so, insert img-tags
if (imgfiles.size()>0) insertImages(imgfiles.toArray(new File[imgfiles.size()]));
}
dtde.getDropTargetContext().dropComplete(true);
} else {
System.err.println("DataFlavor.javaFileListFlavor is not supported, rejected");
dtde.rejectDrop();
}
}
catch (IOException ex) {
System.err.println("IOException");
dtde.rejectDrop();
} catch (UnsupportedFlavorException ex) {
System.err.println("UnsupportedFlavorException");
dtde.rejectDrop();
}
}
}
Weiß jemand weiter?
Gruß
Daniel