Drag&Drop einer Datei, wie nur den Dateipfad erhalten?

Status
Nicht offen für weitere Antworten.

Stefan1200

Top Contributor
ich möchte gerne wissen, wie ich es programmiere, das ich nur den Dateipfad von der Datei erhalte, die per Drag&Drop fallen gelassen wurde. Ich verwende Swing GUIs.

Ich habe im Internet haufenweise Dokus gefunden zum Thema Drag&Drop, die nur darauf eingehen, wie man die fallengelassene Datei speichert und diese anzeigt. Aber das möchte ich ja nicht. Geht das überhaupt anders?
 

bummerland

Top Contributor
du sagst, es wird beschrieben, wie man die fallengelassene datei speichert. wenn du von dieser datei ein File-Object anlegst, bekommst du den Pfad mit file.getDirectory()
 

Stefan1200

Top Contributor
Danke für den Tipp.

Ich habe nochmal einen Text über Drag&Drop gelesen und sogar noch eine einfachere Möglichkeit gefunden, den Pfad zu erhalten.

Aber nun habe ich noch ein anderes Problem.
Ich hoffe Ihr könnt mir da helfen.

Und zwar habe ich jetzt ein kleines Drag&Drop Testprogramm geschrieben, um das son bissel zu üben. Das Programm besteht aus einem JTextField und einem JButton (und ein paar weitere fürs Drag&Drop unwichtige Dinge). Auf dem JButton kann man eine Datei fallen lassen, und im JTextField wird dann der Pfad zu der Datei reingeschrieben.
So viel zu der Erklärung des Programms.

Nun meine Fragen:

1. Wie kann ich heraus bekommen, auf welche GUI Componente die Datei fallen gelassen wurde? Mal angenommen ich habe mehrere JButtons, wie finde ich heraus, das es gerade der 5. JButton war? Mit
e.getSource == bTest
funktionierte es nicht (bTest ist der Instanzierte Name des JButton).

2. Wie baue ich das in meinem Source ein, das ich den Pfad von allen fallengelassenen Dateien erhalte. Mein Test Programm zeigt nur den ersten an. Ich habe zwar schon ein paar Sachen probiert, aber es klappt nicht.
Wenn ich mir die Länge des Flavors anschaue (wie in der for Schleife), steht auch immer nur 1 drin, auch wenn ich mehrere drauf werfe.
Hinweis: Als ich das ausprobiert habe, habe ich natürlich den Programmpfad immer nur hinzu gefügt und nicht wie im jetzigen Source
das ich den Inhalt überschreibe.


Damit Ihr überhaupt versteht, was ich hier schreibe, einmal den Sourcecode unten angehängt. Der Source ist komplett von mir geschrieben, lediglich die öffentliche drop Methode habe ich aus einer Anleitung genommen und für meine Bedürfnisse angepasst und leicht abgeändert.


Code:
import java.awt.*;					// Need for BorderLayout
import java.awt.dnd.*;				// Need for Drag&Drop
import java.awt.event.*;			// Need for WindowListener
import java.awt.datatransfer.*;		// Need for Transferable
import javax.swing.*;				// Need for Swing GUI Elements

class DnDTest extends JFrame
implements DropTargetListener
{
	JPanel rootGui = (JPanel)getContentPane();
	JLabel lTest = new JLabel("File dropped:");
	JButton bTest = new JButton("Drop file on me!");
	JTextField tfTest = new JTextField();
	DropTarget dt = new DropTarget(this, this);
	
	public DnDTest()
	{
		addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				dispose();
				System.exit(0);
			}
		});
		
		rootGui.setLayout(new BorderLayout());
		
		bTest.setDropTarget(dt);
		tfTest.setEditable(false);
		
		rootGui.add(lTest, BorderLayout.NORTH);
		rootGui.add(tfTest, BorderLayout.CENTER);
		rootGui.add(bTest, BorderLayout.SOUTH);
	}
	
	public static void main(String args[])
	{
		DnDTest initDnDTest = new DnDTest();
		initDnDTest.startMe();
	}
	
	void startMe()
	{
		this.setSize(400, 100);
		this.setTitle("Drag & Drop Test (c) 2003 by SSD");
		this.setVisible(true);
	}

	public void dragExit(DropTargetEvent e)
	{
		tfTest.setText("");
	}

	public void drop(DropTargetDropEvent e)
	{
		try
		{
			Transferable tr = e.getTransferable();
			DataFlavor[] flavors = tr.getTransferDataFlavors();
			for (int i = 0; i < flavors.length; i++)
			{
				if (flavors[i].isFlavorJavaFileListType()) {
			        // Accept dropped file
			        e.acceptDrop (e.getDropAction());
			        // Write the path from the first file into the JTextField tfTest
			        tfTest.setText(tr.getTransferData(flavors[i]).toString().substring(1,tr.getTransferData(flavors[i]).toString().length()-1));
			        e.dropComplete(true);
			        return;
				}
			}
		}
		
		catch (Throwable t)
		{
			t.printStackTrace();
		}
		// If an error occurred
		e.rejectDrop();
		tfTest.setText("");
	}
	
	public void dropActionChanged(DropTargetDragEvent e)
	{
	}
	
	public void dragOver(DropTargetDragEvent e)
	{
	}

	public void dragEnter(DropTargetDragEvent e)
	{
		tfTest.setText("And now release the mouse!");
	}
}
 

bummerland

Top Contributor
ich hoffe, ich kann dir zu einigen problemen helfen:

1. du kannst dir eine eigene eigene klasse schreiben und von jbutton ableiten. diese klasse lässt du dann die schnittstelle DropTargetListener implementieren.

2. meinst du, wenn du mehrere gleichzeitig draufziehst oder mehrere nacheinander?
 

Stefan1200

Top Contributor
becstift hat gesagt.:
ich hoffe, ich kann dir zu einigen problemen helfen:

1. du kannst dir eine eigene eigene klasse schreiben und von jbutton ableiten. diese klasse lässt du dann die schnittstelle DropTargetListener implementieren.

2. meinst du, wenn du mehrere gleichzeitig draufziehst oder mehrere nacheinander?


1. Hmm, dann muss ich ja für jeden einzelnen Button eine eigene Klasse schreiben ?!? Es muss doch irgendwie eine einfachere Lösung geben.
Ich dachte eigentlich, das die Überprüfung genauso geht, wie beim ActionListener, in dem ich einfach e.getSource mache, und diesen entweder mit dem JButton vergleiche oder halt per JButton instanziere und infos (zB. den Button Text) abfrage.

Nur leider funktioniert das mit dem DropEvent nicht. Wofür ist da eigentlich e.getSource da?

Welche Möglichkeit gibt es noch, das ich die Drop Quelle erfahren kann?


2. Mehrere Gleichzeitig. Ich weiss, dass es geht. Aber mein Problem: Wie geht das? :)


Hat überhaupt schon jemand mit Drag&Drop gearbeitet, oder tappen gerade alle genauso im Dunkeln wie ich?
 

Stefan1200

Top Contributor
Hat echt keiner eine Idee?
Ich stehe ein bissel auf dem Schlauch was Drag&Drop angeht, komme einfach nicht weiter.

Schade, das dieses Thema nicht im JavaBuch behandelt wird.
 

Stefan1200

Top Contributor
Ich habe jetzt mal beim DropTargetDropEvent mal versucht mit e.getLocation() die Quelle herauszufinden. In dem ich this.getComponentAt(e.getLocation()) gemacht habe. Das Problem ist, ich bekomme nur ein JRootPane Objekt zurück. Weiterhin ist e.getLocation() dafür sinnlos, weil es nur den Point anzeigt ausgehend von dem JButton wo ich eine Datei fallen gelassen habe.

Weiterhin ist mir aufgefallen, das e.getSource() doch funktioniert.
Allerdings gibt er mir nicht wie erwartet den JButton zurück, auf dem ich die Datei fallen lies, sondern genau wie this.getComponentAt(e.getLocation()) gibt auch e.getSource() mir den JRootPane zurück. Damit kann man aber nicht rausfinden, auf welchen Button die Datei gefallen ist, oder?

Bitte helft mir, ich möchte nicht zu blöd für Drag&Drop sein ;-)
 

DTR

Bekanntes Mitglied
Das kann ich dir auch nicht sagen. Mit Drag&Drop habe ich mich noch nicht beschäftigt. Aber ich habe mich mal in der API umgesehen. Ausgehend von deinem DropTargetDropEvent und habe mir mal die Namen und beschreibungen der Methoden angesehen, was so in die Richtung geht den Button zu finden. Und bei DropTargetContext habe ich ein Methode gefunden die eine Component zurückgibt. Ich denke das du die Mal probieren solltest. Vieleicht hilts ja.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Grid und drag and drop Allgemeine Java-Themen 1
offi Drag and Drop mehrerer File aus Explorer in JTable Allgemeine Java-Themen 1
G Drag and Drop und trotzdem MouseEvents Allgemeine Java-Themen 3
G Datei per Drag and Drop auf den Link öffnen Allgemeine Java-Themen 6
S GUI - Drag & Drop Elemente Allgemeine Java-Themen 10
S Falsches Encoding bei Drag and Drop von Umlauten Allgemeine Java-Themen 16
L jTable drag & drop einzelner Zeilen Allgemeine Java-Themen 4
D [Drag&Drop] Design-Pattern-Frage Allgemeine Java-Themen 4
C Drag & Drop, Icons sollen getauscht werden Allgemeine Java-Themen 4
vladimir Welche API für Grafik und Drag&Drop Allgemeine Java-Themen 3
M Zwischenablage/ Drag and Drop Allgemeine Java-Themen 9
G Drag & Drop Allgemeine Java-Themen 6
M Drag and Drop FileListFlavor unter Ubuntu - Nautilus Allgemeine Java-Themen 5
M Drag and Drop: 3 Fragen Allgemeine Java-Themen 3
G Drag&Drop von Textdateien Allgemeine Java-Themen 13
G Datei Verknuepfung, drag&drop Plattformunabhaengig Allgemeine Java-Themen 3
T Drag und Drop von Applet 1 zu Applet 2 _in_ derselben VM Allgemeine Java-Themen 9
T JLable Drag und Drop Allgemeine Java-Themen 4
R Drag und Drop - Fehler während Laufzeit Allgemeine Java-Themen 14
R Drag und Drop von externen Files geht nur als Application Allgemeine Java-Themen 2
P drag und drop und move mit 2 Fenstern fkt. nicht 100 %ig Allgemeine Java-Themen 7
F Drag&Drop Allgemeine Java-Themen 10
M In JTables Drag und Drop verbieten Allgemeine Java-Themen 2
L Drag and Drop Table Allgemeine Java-Themen 9
U Drag & Drop Allgemeine Java-Themen 2
E Frage zu Drag and Drop Allgemeine Java-Themen 2
G Drop down Button Menü (Combobox) Allgemeine Java-Themen 7
L Drop Emails von Outlook in eine JList Allgemeine Java-Themen 5
T Java Excel Drop Down Formularsteuerelement Allgemeine Java-Themen 0
R Drang and Drop: Tab bei Firefox Allgemeine Java-Themen 13
O Text aus einer Textdatei rausholen, der zwischen zwei Schlüsselworten steht Allgemeine Java-Themen 4
V Umgang mit fehlenden Daten in einer Java-Datenanalyseanwendung Allgemeine Java-Themen 5
M Methodenübersicht einer Klasse einsehen Allgemeine Java-Themen 14
T JNA, Aufruf der Funktionen einer dll Allgemeine Java-Themen 5
I Vom Monolith zu Services in einer Webseite Allgemeine Java-Themen 1
W Variable Initialisierung mit dem Ergebnis einer Regex Allgemeine Java-Themen 1
O Werte einer Generic LinkedList zusammenrechenen Allgemeine Java-Themen 14
C Sortieren und Selektieren einer ArrayList<Point3D> Allgemeine Java-Themen 6
A Einzelne Objekte und Unterobjekte einer ArrayList ausgeben Allgemeine Java-Themen 53
TheSepp Wie kann man Leerzeichen aus einer Array liste entfernen? Allgemeine Java-Themen 10
B Ein Objekt einer Klasse mehreren anderen Klassen zur Verfügung stellen? Allgemeine Java-Themen 6
M Optimierung einer Methode (byte-Geraffel) Allgemeine Java-Themen 2
I Wie kann ich den Wert aus einer If abfrage ausgeben Allgemeine Java-Themen 23
S HTML einer Webseite 1:1 so bekommen wie es auch der Browser anzeigt? Allgemeine Java-Themen 14
melaniemueller Einzelne Zeile aus einer txt Datei in einem String speichern Allgemeine Java-Themen 12
L Java überprüfen lassen, ob sich ein gegebener Pfad / das Programm an sich auf einer CD oder Festplatte befindet Allgemeine Java-Themen 14
J (Geplante) Änderungen an einer Datei vorübergehend speichern und anwenden? Allgemeine Java-Themen 12
ME2002 Fragen aus einer Java Klausur Allgemeine Java-Themen 67
_user_q Obfuscate einer .jar-Datei mit ProGuard? Allgemeine Java-Themen 2
_user_q Verknüpfung einer .jar-Datei (liegt z. B. auf dem Desktop) im Autostart-Ordner erstellen? Allgemeine Java-Themen 20
C Parsen einer sich updatenden Html mithilfe von jsoup Allgemeine Java-Themen 4
E Eine Methode einer extendeten Klasse deakitivieren Allgemeine Java-Themen 12
H Performance einer Monte-Carlo-Simulation verbessern Allgemeine Java-Themen 6
LimDul Kam eine java.net.URL zu einer HashMap und ging als DNS Anfrage wieder heraus Allgemeine Java-Themen 18
E Variablen Nach Übergabe einer Variable den Constructor aufrufen Allgemeine Java-Themen 16
Zeppi NullPointerException in einer if-Abfrage Allgemeine Java-Themen 6
D Abbruch einer ViewScoped Bean in Arbeit Allgemeine Java-Themen 2
Lukas2904 Schleife mit ansteuerung einer Klasse Allgemeine Java-Themen 5
d.lumpi Aus Einer Klasse auf ein Objekt einer anderen Klasse Zugreifen Allgemeine Java-Themen 1
Lukas2904 Wie kann man cps (ClicksPerSecond) in einer GUI anzeigen lassen? Allgemeine Java-Themen 4
O Produziert das Tool "jpackage" (ab JDK 14) .exe Dateien, die auf einer Zielumgebung ohne JRE lauffähig sind ?` Allgemeine Java-Themen 7
R Lambda Expression in einer Methode execute() aufrufen (execute() ist eine Methode aus dem funktionalen Interface Command) Allgemeine Java-Themen 5
Drachenbauer wie kann ich alle instanzen einer Klasse durchsehen, ohne, dass diese in einer Liste erzeugt wurden? Allgemeine Java-Themen 11
N BlueJ Implementation einer Analoguhr Allgemeine Java-Themen 0
O Formatierte String ausgabe bei vier Variablen in einer Zeile Allgemeine Java-Themen 1
N Speicherort einer Datei im Explorer ändern Allgemeine Java-Themen 8
O Datentypen Wie kann ich den Typ einer ArrayList abfragen ? Allgemeine Java-Themen 7
O Leerzeichen und Umlaute im Pfad einer Java Applikation machen Probleme Allgemeine Java-Themen 13
H Mehrere PNG-Files in einer Datei Allgemeine Java-Themen 9
G Java Editor Löschen doppelter Zahlen einer Liste Allgemeine Java-Themen 2
J JSON Daten von einer Webseite erhalten Allgemeine Java-Themen 2
L RegEx für Teile einer Berechnung Allgemeine Java-Themen 14
L Erste Schritte TDD testen einer Methode mit injezierten Services? Allgemeine Java-Themen 12
J Zerlegen einer Zahl Allgemeine Java-Themen 6
Zrebna Wie kann man endgültig aus einer Rekursion ausbrechen? Allgemeine Java-Themen 14
MiMa Person in einer Arraylist hinzugügen mit Prüfung ? Allgemeine Java-Themen 6
Meeresgott Effizientester Weg um nach der Value einer verschachtelten Map aufzulösen Allgemeine Java-Themen 5
H Mehrere Datentypen in einer Arraylist speichern Allgemeine Java-Themen 9
MiMa Prüfziffer einer EAN Nummer berechnen Allgemeine Java-Themen 4
MiMa Erstellungsdatum einer Datei Allgemeine Java-Themen 10
Drachenbauer Wie kann ich einer existierenden Enum von außerhalb veränderte Werte zuweisen? Allgemeine Java-Themen 5
S HTML den ich von einer URL hole nicht identisch mit dem HTML im Browser Allgemeine Java-Themen 1
S Rückgabe einer HttpURLConnection für eine Seite einlesen bei der man eingeloggt ist..? Allgemeine Java-Themen 5
O Java-Applikation tut in Netbeans, als JAR nicht, wegen Pfadangaben einer benötigten Datei Allgemeine Java-Themen 8
M Hilfe bei einer Java Programmieraufgabe! Ab morgen Montag um 08:00 Uhr Allgemeine Java-Themen 5
J Algorithmen Analyse einer Schleife Allgemeine Java-Themen 6
Drachenbauer Wie finde ich den Aufrufer zu einer Methode, die sich nicht in meinem Projekt befindet? Allgemeine Java-Themen 2
J Die Letzte Zahl aus einer Text datei lesen Allgemeine Java-Themen 8
P einen public <Optinal String> in einer anderen Klasse mit einem Int vergleichen Allgemeine Java-Themen 2
A Mithilfe von einer Nummer einen Namen finden n-Beziehung Allgemeine Java-Themen 8
Scream_ilias Auf einer Website die anmeldedaten eingeben Allgemeine Java-Themen 9
V Threads Probleme beim Aufrufen von Methoden einer anderen Klasse (Threads) Allgemeine Java-Themen 14
I Lohnt sich heutzutage der Aufwand einer Portierung für MacOS Allgemeine Java-Themen 8
J Suchen von einer Scannereingabe in einem HashSet Allgemeine Java-Themen 1
M Konstruktor einer Methode Allgemeine Java-Themen 35
L Echtzeitdaten aus einer Webseite ziehen mit Java Allgemeine Java-Themen 19
V EMail, Attachments auslesen von einer Email Allgemeine Java-Themen 0
T Google Links in einer Liste Allgemeine Java-Themen 4
T Sinn einer toString Methode Allgemeine Java-Themen 3
P Durchlaufen einer Queue Allgemeine Java-Themen 9

Ähnliche Java Themen

Neue Themen


Oben