Drag and Drop

Busi

Mitglied
Hallo alle zusammen,

Also, ich habe noch nie ein Forum aktiv genuzt. Also ist das meine Premiere :)

Ich suche eine Möglichkeit um eine Datei von meinem Desktop in ein Java Programm zu ziehen.

Eine Bitte, ich habe mich mit der Suche in diesem Forum auseinandergesetzt, und ich weiß auch was google ist, beides hat mich aber nicht weiter gebracht. Sollte ich also zu dumm zum suchen sein, bitte einen Link mit reinstellen.

Danke im vorraus
 
Oh ich kan gegenargumentieren, ich habe diesen artikel gefunden. Und mich auch über ein Beispiel gefreut, denn aus denen lernt man ja am meisten. Aber leider Funktionierte es nicht. Es wurde zwar das Fenster angezeit, und man konnte auch Dateien "raufziehen", aber nicht passierte.

Ich werde mich heute aber nochmal intensiver mit damit auseinandersetzen.

<zusatz>
Doch es geht, aber nur unter Windows, was mir leider nicht weiter hilft. Hat jemand eine Idee für die Betriebsystemübergreifende umsetzung
</zusatz>
 
Zuletzt bearbeitet:
Hallo,

du kannst diese Version umschreiben, dass sie unter Linux funktioniert. Mir ist leider keine Möglichkeit bekannt, wie es in Linux und Windows funktioniert.

MFG

zEriX
 
Nach langen suchen habe ich was gefunden.
Code:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.dnd.DnDConstants;
import java.awt.dnd.DropTarget;
import java.awt.dnd.DropTargetDragEvent;
import java.awt.dnd.DropTargetDropEvent;
import java.awt.dnd.DropTargetEvent;
import java.awt.dnd.DropTargetListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.InputStream;
import java.io.InputStreamReader;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JTextArea;
import javax.swing.JWindow;

public class TestGrafik extends JWindow implements DropTargetListener 
{
    public JTextArea ta = new JTextArea();;
    private String file = null;
    public String getFile(){return file;}
    public JWindow jw = this;
    public void setFile(String file){this.file = file;}
    public TestGrafik() 
    {
        setSize(300,300);
        getContentPane().add(ta, BorderLayout.CENTER);
        DropTarget dt = new DropTarget(ta, this);
        setVisible(true);
    }
    public void dragEnter(DropTargetDragEvent dtde) {}
    public void dragExit(DropTargetEvent dte) {}
    public void dragOver(DropTargetDragEvent dtde) {}
    public void dropActionChanged(DropTargetDragEvent dtde) {}
    public void drop(DropTargetDropEvent dtde) 
    {
        try 
        {
            Transferable tr = dtde.getTransferable();
            DataFlavor[] flavors = tr.getTransferDataFlavors();
            for (int i = 0; i < flavors.length; i++) 
            {
                
                if (flavors[i].isFlavorJavaFileListType()) 
                {
                    dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
                    setFile(((java.util.List)tr.getTransferData(flavors[i])).get(0).toString());
                    dtde.dropComplete(true);
                    return;
                }
                else if (flavors[i].isRepresentationClassInputStream()) 
                {
                    dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
                    ta.read(new InputStreamReader((InputStream)tr.getTransferData(flavors[i])),"from system clipboard");
                    dtde.dropComplete(true);
                    setFile(ta.getText().trim());
                    ta.setText(null);
                    System.out.println(getFile());
                    return;
                }
            }
            System.out.println("Drop failed: " + dtde);
            dtde.rejectDrop();
        } 
        catch (Exception e) 
        {
            e.printStackTrace();
            dtde.rejectDrop();
        }
    }
    public static void main(String args[]) 
    {
        new TestGrafik();
    }
}

mit getFile bekommt man den Pfad mit Datei zurück
 
Zuletzt bearbeitet:
Vom Desktop in ein Java-Prog funktioniert ja recht gut, aber wie geht der umgekehrte Weg:

Ich will eine Datei aus meinem Java-Prog auf den Desktop ziehen: das einzige, was ich habe, ist der Dateiname, Endung und Bytestream..

ich kriegs einfach nicht gebacken...
 
Zurück