Drag and Drop Fenster

Diskutiere Drag and Drop Fenster im AWT, Swing, JavaFX & SWT Bereich.
N

Nesselbrand

Wie kann ich es realisieren, dass ich eine Datei in ein Fenster hineinziehe, damit ich von dieser den Pfad herausfinden kann
 
mihe7

mihe7

Wenn Du uns noch mitteilst, mit welchem Framework (Swing, JavaFX, SWT, ...) Du arbeitest :)
 
N

Nesselbrand

Wo muss ich dann das implementieren:
Code:
List<File> dropppedFiles = (List<File>)transferable.getTransferData(DataFlavor.javaFileListFlavor)
 
J

JustNobody

In meinem Link die Antwort von rustyx hat doch einen Auszug, der es zeigt, wie es im Event ablaufen kann ...
 
N

Nesselbrand

Java:
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();
        }
    }
});
Aber was mach die Zeile?:
Code:
evt.getTransferable().getTransferData(DataFlavor.javaFileListFlavor);
 
mihe7

mihe7

Hier mal im Zusammenhang zusammengeschustert:

Java:
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());
    }
}
 
J

JustNobody

Thema: 

Drag and Drop Fenster

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben