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

Status
Nicht offen für weitere Antworten.
S

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

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()
 
S

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

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?
 
S

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?
 
S

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.
 
S

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 ;-)
 
D

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
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
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
M 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
M Prüfziffer einer EAN Nummer berechnen Allgemeine Java-Themen 4
M 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
J Größe einer CD ermitteln Allgemeine Java-Themen 10
L Operatoren Java Reflections: Alle Methoden einer Klasse aufrufen ohne Exceptions Allgemeine Java-Themen 5
H Länge einer verketteten Liste Allgemeine Java-Themen 4
B Quellcode einer Java libary finden um zu copy & paste'n Allgemeine Java-Themen 5
N Daten einer JCoTable in JTextArea anzeigen Allgemeine Java-Themen 7
sascha-sphw Java 9 module Zugriff auf eine resource einer anderen JAR Allgemeine Java-Themen 0
N Generic Type einer Generischen Klasse während der Laufzeit bekommen Allgemeine Java-Themen 2
E Erstellen einer Liste mit einer maximalen Menge an Elementen Allgemeine Java-Themen 13
M Wie kann ich ein int[] Array in einer Methode benutzen? Allgemeine Java-Themen 6
T Compiler-Fehler NoClassDefFoundError beim Laden einer Class Allgemeine Java-Themen 11
H Klassen LibGDX - Verschiedene Klassen als Value in einer Map Allgemeine Java-Themen 8
P Element einer Liste wurde hinzugefügt, aber es gibt keinen Zugriff Allgemeine Java-Themen 2
E Elemente innerhalb einer ArrayList vergleichen Allgemeine Java-Themen 33
J Einen Thread in einer Schleife Allgemeine Java-Themen 2
T Java Programm aus einer DB laden und starten Allgemeine Java-Themen 2
J int Werte in einer anderen Klasse in Arrays speichern Allgemeine Java-Themen 3
S Hilfe bei dem Auslesen einer YAML Datei Allgemeine Java-Themen 8
D Warum kann ich eine (deflaut) Klasse aus einer Libary in einem anderen Projekt benutzen? Allgemeine Java-Themen 3
B Generelle Frage bei einer Webanwendung / Reduzierung von DB Abfragen Allgemeine Java-Themen 1
scitex Methode einer Klasse meldet Fehler "misplaced construct(s)" Allgemeine Java-Themen 13
L Fehler bei der Ausführung einer Jar Allgemeine Java-Themen 2
Javafan01 Deklarieren einer Math.random() Zufallszahl Allgemeine Java-Themen 16
A Probleme beim Verstehen einer Aufgabenstellung Allgemeine Java-Themen 11
H Laden einer (Resourcendatei) aus einem Jar-File Allgemeine Java-Themen 17
P Array einer abstrakten Klasse Allgemeine Java-Themen 4
J Teil einer URL auslesen Allgemeine Java-Themen 13
J Ordner und Datei Struktur einer War Datei Allgemeine Java-Themen 1
F Problem beim Einlesen einer Textdatei Allgemeine Java-Themen 12
J Zugriff auf erstellte Objekte einer Klasse von einer Klasse ausserhalb Allgemeine Java-Themen 3
K Gespeicherte Daten von einer LinkedList auf vier LinkedList verteilen Allgemeine Java-Themen 6
L Seite einer Partner Website neu laden Allgemeine Java-Themen 1
M Date aus einer ArrayList<Date> holen ?? Allgemeine Java-Themen 5
kodela Dynamisches Array in einer Klasse Allgemeine Java-Themen 5
M ArrayList Rückgabewerte aus einer Funktion Allgemeine Java-Themen 15
K Erste Schritte Start einer JAR Datei 2 Wege aber einmal nicht die volle Funktionlität Allgemeine Java-Themen 20
kodela Übergabe einer Referenz Allgemeine Java-Themen 20
S Anwendung die alle Abhaengigkeiten einer Library listet..? Allgemeine Java-Themen 5
L Classpath Relativer Pfad einer Resource? Allgemeine Java-Themen 9
D HTTP Aufruf einer Methode aus einem Servlet heraus Allgemeine Java-Themen 0
RalleYTN Audiolänge einer MP3 Datei erhalten ohne diese vollständig zu laden Allgemeine Java-Themen 15
K Summierung einer Variablen Allgemeine Java-Themen 5
S Code 'innerhalb' des synchronen Bereichs einer BlockingQueue ausfuehren..? Allgemeine Java-Themen 7
B Gibt es eine Funktion die den Datentyp einer Variablen ermittelt? Allgemeine Java-Themen 8

Ähnliche Java Themen

Anzeige

Neue Themen


Oben