Drop von Dateien auf Frame - welche Drop-Location?

Daniel_L

Bekanntes Mitglied
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:

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
 

Zurück
Oben