Drag&Drop

Status
Nicht offen für weitere Antworten.
F

Fabeltier

Gast
Hallo,
ich schreibe ein Tabellen-Prg, dabei ist es moeglich zB ein .csv File oder auch ein .xls File zu oeffnen und in eine oder mehrere Tabellen zu laden.

Laesst sich in Java eigentlich auch Drag and Drop realisieren? bzw wenn ich zB mit der Mouse ein .xls File "in" die Tabelle ziehe, kann ich daraus irgendwie ein "Drag-Event" machen und mit einem bspw Mouselistener drauf reagieren? Wie bekomm ich zB die Adresse der gedrag-ten Datei als "File" bzw deren Pfad?
 

André Uhres

Top Contributor
Die JTable muss DropTargetListener implementieren, dann bekommst du in der drop Methode das DropTargetDropEvent was dir den Transferable liefert.
 
F

Fragend..

Gast
hmnja, ich will ja nich die Tabelle wegdrag/droppen.. eigentlich is die Tabelle ziemlich egal. Mir geht es darum, dass ich ein File, das mit .xls oder .csv endet, auf die JTable ziehe (es koennte dabei auch nur irgendein Panel, der ganze JFrame oder sonst was sein), und dann irgendwie ein File Objekt auf den Source Folder bekomme. Das muss so sein, weil .xls, .csv oder .txt sich ja komplett anders einlesen lassen - das ist soweit ja auch schon implementiert, ich brauch wie gesagt nur ein "File" Objekt.

Ich hab, das mal an Hand eines Demos probiert, bis zum Transfereable laeuft alles super, nur:
Welchen Flavor hat das ganze dann? ich versuchte es folgendermassen zu droppen (wie gesagt ich will nen File oder Filenamen haben):
Code:
public void drop(DropTargetDropEvent e) {
		try {
			if (e.isDataFlavorSupported(DataFlavor.stringFlavor)) {
				Transferable tr = e.getTransferable();
				e.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
				String s = (String) tr.getTransferData(DataFlavor.stringFlavor);
				lmod.addElement(s);
				e.dropComplete(true);
			}else{
				e.rejectDrop();
(...)
Das laeuft beim ziehen eines Textes von nem Label auf eine Liste, wunderbar - nur wenn ich ein File auf diese Liste ziehe, wird das rejected - also welchen DataFlavor brauch ich da (javaFileFlavor tut's irgendwie nich). Wie bekomme ich aus dem Transferable dann den Pfad, bzw direkt ein File objekt?

TIA
 
G

Guest

Gast
@Foobie:
"oder frag jemanden der's weiss..." haha

@Andre Uhres:
willst Du mir sagen, dass ich die Liste in eine list<File> umaendern soll? ich wuerde die File objekte in Strings umwandeln. Soll ich statt des Transfereables eine list<File> irgendwo rausquetschen? Wo? Das Problem ist, dass er in der drop(DropblaEvent e) Methode schon gar nicht in die entsprechende if(e.isDataFlavorSupported(DataFlavor.javaList.. hineinspringt, als antwort, wenn ich mir den DataFlavor ausgeben lasse mit
Code:
				DataFlavor []df = e.getTransferable().getTransferDataFlavors();
				System.out.println("Data Flavors - length: " + df.length);
				for(DataFlavor d: df) System.out.println("\tFlavor: " + d);

als array bekomme ich in etwa sowas:
Code:
Data Flavors - length: 23
	Flavor: java.awt.datatransfer.DataFlavor[mimetype=text/uri-list;representationclass=java.io.Reader]
	Flavor: java.awt.datatransfer.DataFlavor[mimetype=text/uri-list;representationclass=java.lang.String]
	Flavor: java.awt.datatransfer.DataFlavor[mimetype=text/uri-list;representationclass=java.nio.CharBuffer]
	Flavor: java.awt.datatransfer.DataFlavor[mimetype=text/uri-list;representationclass=[code]
	Flavor: java.awt.datatransfer.DataFlavor[mimetype=text/uri-list;representationclass=java.io.InputStream;charset=UTF-16]
	Flavor: java.awt.datatransfer.DataFlavor[mimetype=text/uri-list;representationclass=java.nio.ByteBuffer;charset=UTF-16]
	Flavor: java.awt.datatransfer.DataFlavor[mimetype=text/uri-list;representationclass=[B;charset=UTF-16]
	Flavor: java.awt.datatransfer.DataFlavor[mimetype=text/uri-list;representationclass=java.io.InputStream;charset=UTF-8]
	Flavor: java.awt.datatransfer.DataFlavor[mimetype=text/uri-list;representationclass=[B;charset=UTF-8]
	Flavor: java.awt.datatransfer.DataFlavor[mimetype=text/uri-list;representationclass=java.io.InputStream;charset=UTF-16BE]
	Flavor: java.awt.datatransfer.DataFlavor[mimetype=x-special/gnome-icon-list;representationclass=java.io.InputStream]
	Flavor: java.awt.datatransfer.DataFlavor[mimetype=text/uri-list;representationclass=java.nio.ByteBuffer;charset=UTF-8]
	Flavor: java.awt.datatransfer.DataFlavor[mimetype=text/uri-list;representationclass=java.nio.ByteBuffer;charset=UTF-16BE]
	Flavor: java.awt.datatransfer.DataFlavor[mimetype=text/uri-list;representationclass=[B;charset=UTF-16BE]
	Flavor: java.awt.datatransfer.DataFlavor[mimetype=text/uri-list;representationclass=java.io.InputStream;charset=UTF-16LE]
	Flavor: java.awt.datatransfer.DataFlavor[mimetype=text/uri-list;representationclass=java.nio.ByteBuffer;charset=UTF-16LE]
	Flavor: java.awt.datatransfer.DataFlavor[mimetype=text/uri-list;representationclass=[B;charset=UTF-16LE]
	Flavor: java.awt.datatransfer.DataFlavor[mimetype=text/uri-list;representationclass=java.io.InputStream;charset=ISO-8859-1]
	Flavor: java.awt.datatransfer.DataFlavor[mimetype=text/uri-list;representationclass=java.nio.ByteBuffer;charset=ISO-8859-1]
	Flavor: java.awt.datatransfer.DataFlavor[mimetype=text/uri-list;representationclass=[B;charset=ISO-8859-1]
	Flavor: java.awt.datatransfer.DataFlavor[mimetype=text/uri-list;representationclass=java.io.InputStream;charset=US-ASCII]
	Flavor: java.awt.datatransfer.DataFlavor[mimetype=text/uri-list;representationclass=java.nio.ByteBuffer;charset=US-ASCII]
	Flavor: java.awt.datatransfer.DataFlavor[mimetype=text/uri-list;representationclass=[B;charset=US-ASCII]

das sieht eben mit dem label so aus:
Code:
Data Flavors - length: 2
	Flavor: java.awt.datatransfer.DataFlavor[mimetype=application/x-java-serialized-object;representationclass=java.lang.String]
	Flavor: java.awt.datatransfer.DataFlavor[mimetype=text/plain;representationclass=java.io.InputStream;charset=unicode]

Ich habe nun gesehn, dass bei dem Beispiel, die Quelle explizit als String angegeben wird. Das Bsp bezieht sich auf das D&D von Label in ein Panel.. ich werde mal sehn, vllt finde ich ein Bsp fuer D&D von Files auf ein Panel, weil ich ja den File Explorer ja nicht von meinem Programm aus aufmache, ich denke, da fehlt mir noch etwas mehr Information darueber. Bin auch fuer Vorschlaege offen.
 
G

Guest

Gast
Na, Du Spassvogel! Ich poste doch nich zuerst und probiers danach aus. :wink:

Dass das Ergebnis etwas kryptisch aussieht kann man oben bewundern und der Sachverhalt scheint wohl doch etwas komplexer zu sein. Wie gesagt, ich denke, ich muss mich erst mal weiter einlesen.. Danke trotzdem!
 

foobar

Top Contributor
Na, Du Spassvogel! Ich poste doch nich zuerst und probiers danach aus.
Bei den meisten Posts hier frage ich mich sowieso warum derjenige nicht mal einen Blick in die API-Docs ein Standardwerk zu Rate zieht oder ein paar Minuten Googled. Das würde uns allen viel Zeit ersparen. Fragen wie "Wie bekomme ich Daten in einen JTable" etc. lassen sich innerhalb von ein paar Minuten leicht durch die oben genannten Vorgehensweisen lösen.
 

André Uhres

Top Contributor
Anonymous hat gesagt.:
Code:
DataFlavor []df = e.getTransferable().getTransferDataFlavors();
for(DataFlavor d: df) System.out.println("\tFlavor: " + d);
Der gibt den javaFileListFlavor ja auch nur aus wenn du ein File droppst ->
Flavor: java.awt.datatransfer.DataFlavor[mimetype=application/x-java-file-list;representationclass=java.util.List]
 
F

Fabeltier

Gast
@Andre Uhres:
Ja, die Ausgabe hab ich beim droppen erhalten - wie gesagt, ich muss mich wohl noch etwas mit der Implementation beschaeftigen, da ich denke, dass noch einige andre Fehler drin stecken, die dann letztlich dazu fuehren, dass das beim droppen nicht richtig erkannt wird.

@foobar:
Wenn mich eine Frage nervt, beantworte ich sie nicht.
 
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
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
S Drag&Drop einer Datei, wie nur den Dateipfad erhalten? Allgemeine Java-Themen 9
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

Ähnliche Java Themen

Neue Themen


Oben