Swing Drag&Drop mit Feedback (Image am Mauszeiger)

Bieger

Mitglied
Hallo allerseits,

bei mir liegen ein wenig die Nerven blank. Eigentlich will/muß ich nur eine Drag&Drop-Operation realisieren, aber da ist bisher endlos Zeit reingegangen und ich habe noch immer kein Ergebnis.

Die Randbedingungen:

* D&D findet nur innerhalb der Java-Applikation statt, also nix auf Desktop oder so.
* Dafür gibt es mehr als ein JFrame über das D&D hinweg funktionieren muß

Die JFrames enthalten u.a. JTables und JLists, bzw. davon abgeleitete Elemente. Der D&D geschieht sowohl innerhalb einer JTable (das funktioniert bereits), als auch zwischen einer JList und einer JTable (funktioniert auch). Zwischen JTables in verschiedenen JFrames noch nicht, das steht noch auf der Todo-Liste.

Gezogen werden also Elemente (Zellen) einer JTable bzw. JList. Das D&D funktioniert grundsätzlich wie gesagt, realisiert habe ich es mit javax.swing.TransferHandler und dem ganzen Pipapo.

Problem, weswegen ich hier den Thread aufmache: Von sich aus zeigt Swing während des Drags nur einen simplen Mauszeiger. Angeblich (!) auch nie mehr. Das ist verdammt wenig, denn so weiß der Nutzer nicht "Hab ich jetzt die Maustaste gedrückt, ist das wirklich ein Drag?". Ich will also - wie es eigentlich in jeder Applikation üblich ist - am Mauszeiger ein Image festpinnen, damit der User sieht, daß da was verschoben wird.

Was habe ich gemacht? Glasspane drüber übers JFrame, dort wird ein Image gepinselt. Soweit so gut. Woran ich scheitere ist die Information, wo die Maus gerade ist. Zuerst habe ich einen MouseMotionListener an den JFrame gepappt. Wurde nie aufgerufen. Dann an das JPanel da drin. Wurde nie aufgerufen. Allen Elemente auf dem JPanel einen MouseMotionListener verpassen wollte ich nicht, weil ... war mir bisher zu umständlich.

Also wieder eine Runde Googeln einlegen und mit dieser Lösung gekommen:

Java:
Toolkit.getDefaultToolkit().addAWTEventListener( listener, AWTEvent.MOUSE_MOTION_EVENT_MASK );

Funktioniert, ich war schon ganz happy, bis ... man einen Drag startet, ab dann wird der Handler nicht mehr aufgerufen :bahnhof:

Wahnsinn, ich dachte ich will was total einfaches und meiner Ansicht nach ist das auch nix esoterisches, aber ich fummel alleine mit der grafischen Rückmeldung beim Ziehen schon über einen Tag rum.

Kann mir bitte jemand einen Tip geben?
 

r.w.

Bekanntes Mitglied
Hallo Bieger,

man kann einen eigenen Cursor z.B. aus einem Bild erzeugen und an eine Drag-Routine übergeben.
Hinter dem folgende Link findest Du ein paar Probekapitel des Buches "Swing Hacks".
Speziell das Kapitel 65 "Drag and Drop with Files", das dort kostenlos als PDF zum Download
angeboten wird, könnte für Dich interessant sein.

Online Probekapitel zu Swing Hacks : Tips and Tools for Killer GUIs

Selbst gemacht hab ich das in der Form aber noch nicht.

Ich hoffe, dass hilft Dir weiter.

VG ROlf
 

Bieger

Mitglied
Danke für den Tip, aber in dem Beispiel geht es speziell um die FileSystemView und dem Drag&Drop von Dateien, also aus der Applikation heraus.

Mein Fall ist ja viel einfacher gestrickt, ich brauche die visuelle Rückmeldung nur innerhalb der Applikation, weil ich kein D&D mit dem Rest des Systems mache.

Egal wo man hinkuckt, es wird immer empfohlen das Image auf das Glasspane zu pinseln und die Mausbewegung zu verfolgen. Problem auf das ich gestoßen bin ist, daß der MouseMotionListener ab dem Zeitpunkt wo der Drag startet keine Events mehr bekommt. Ansonsten wäre ich mit dieser Lösung völlig zufrieden.

Wenn ich mir die SDK-Doku ankucke sollte es eigentlich sogar noch viel einfacher gehen: Die Klasse TransferHandler hat eine Methode getVisualRepresentation(), also genau das was ich suche! Nur ... wird die nie aufgerufen. Keine Ahnung weshalb.

Ich hatte gehofft es gäbe Menschen auf diesem Planeten, die mal D&D in Java mittels TransferHandler implementiert haben und dabei mehr als nur den Mauszeiger sehen wollten :)
 
G

Gast2

Gast
Ich hatte gehofft es gäbe Menschen auf diesem Planeten, die mal D&D in Java mittels TransferHandler implementiert haben und dabei mehr als nur den Mauszeiger sehen wollten :)

Habs auch mit einer GlassPane gekläst vor langer Zeit aber die Events waren nie ein Problem. MouseListener und MousemotionListner haben gereicht.
 

Bieger

Mitglied
Also, ich habe nun den MouseMotionListener mit allen Components des ContentPane verbunden. Weil ich diese Info gefunden habe:

One complication affects mouse-entered, mouse-exited, and mouse-released events. When the user drags (presses and holds the mouse button and then moves the mouse), then the component that the cursor was over when the drag started is the one that receives all subsequent mouse and mouse-motion events up to and including the mouse button release. That means that no other component will receive a single mouse event -- not even a mouse-released event -- while the drag is occurring.

Das Doofe ist nur: Ich sehe beim Start des Drags genau ein Event an mouseDragged(), danach nichts mehr bis zum Drop. :(

An welcher Komponente hast du denn deinen MouseMotionListener angeflanscht?
 

Bieger

Mitglied
Aus der JDK-Doku zu MouseMotionListener.mouseDragged():

Invoked when a mouse button is pressed on a component and then dragged. MOUSE_DRAGGED events will continue to be delivered to the component where the drag originated until the mouse button is released (regardless of whether the mouse position is within the bounds of the component).

Due to platform-dependent Drag&Drop implementations, MOUSE_DRAGGED events may not be delivered during a native Drag&Drop operation.

Der Drag startet entweder in einer JTable oder JList, an beiden Komponenten habe ich definitiv den Listener angeflanscht, aber bekomme einen bis ein paar mouseDragged()-Events und dann ist Funkstille.

Was ist denn eine "native Drag&Drop operation"?

Und mir kommt da noch ein schrecklicher Verdacht: Die Zellen der JTable/JList sind ein JLabel ... Ob das die ganzen Events bekommt? Mal probieren ...

Edit: Nein, die Zellen der JTable/JList bekommen die Events auch nicht.

Allerdings bin ich jetzt ziemlich am Ende meines Lateins. Einen Listener aufs Glasspane habe ich auch gesetzt, auch kein Erfolg.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Drag und drop aus einer JTable - bitte um Unterstützung AWT, Swing, JavaFX & SWT 2
G JPanel per Drag and Drop JButtons und Bilder ablegen AWT, Swing, JavaFX & SWT 1
AmsananKING ListView Drag And Drop AWT, Swing, JavaFX & SWT 0
AmsananKING Drag And Drop Filenames Inside A Listview AWT, Swing, JavaFX & SWT 1
DonBronson Java Graphics bewegbar machen (Drag&Drop) AWT, Swing, JavaFX & SWT 3
M Polygon per Drag&Drop verschieben AWT, Swing, JavaFX & SWT 26
Z Swing Drag and Drop mit einem JButton AWT, Swing, JavaFX & SWT 1
N Drag and Drop Fenster AWT, Swing, JavaFX & SWT 11
F Drag&Drop mit Transparenter Farbe bei PNG AWT, Swing, JavaFX & SWT 0
D JavaFX Pane per Drag&Drop bewegen? AWT, Swing, JavaFX & SWT 2
L JavaFX Drag and Drop funktioniert nicht AWT, Swing, JavaFX & SWT 3
J Drag and Drop von eigenen Objekten AWT, Swing, JavaFX & SWT 3
J Drag and Drop eines Buttons AWT, Swing, JavaFX & SWT 0
T Swing Drag and Drop für JComponents AWT, Swing, JavaFX & SWT 1
Z Swing Drag&Drop zwischen JTable und JTree AWT, Swing, JavaFX & SWT 4
F Drag und Drop AWT, Swing, JavaFX & SWT 0
L JavaFX JavaFX Chart Drag and Drop AWT, Swing, JavaFX & SWT 3
D JavaFX Drag&Drop mehrerer TreeViews oder TableViews AWT, Swing, JavaFX & SWT 1
P Drag & Drop zwischen Panels AWT, Swing, JavaFX & SWT 0
U Drag and Drop mit imageview AWT, Swing, JavaFX & SWT 0
U Drag and Drop imageviews AWT, Swing, JavaFX & SWT 8
D SteelSeries in Netbeans als Drag-and-Drop einbinden AWT, Swing, JavaFX & SWT 0
C JTable Drag and Drop von Zeilen innerhalb einer Table AWT, Swing, JavaFX & SWT 2
S Swing Update eine JTabelle nach einer Drag&Drop Operation AWT, Swing, JavaFX & SWT 0
S Swing Suche Drag & Drop Beispiele AWT, Swing, JavaFX & SWT 1
A Drag and Drop mit JAVAFX- Scenebuilder AWT, Swing, JavaFX & SWT 1
R Performance Drag and Drop & Timer AWT, Swing, JavaFX & SWT 3
R Drag and Drop Problem auf Jpanel AWT, Swing, JavaFX & SWT 2
N Swing JTable und Drag und Drop AWT, Swing, JavaFX & SWT 2
A Drag and Drop eigener Objekte AWT, Swing, JavaFX & SWT 7
C Drag and Drop (inventar) AWT, Swing, JavaFX & SWT 15
F Swing Drag and Drop in JTree aus verschiedenen Listen AWT, Swing, JavaFX & SWT 6
T Swing JButton per Drag&Drop verschieben AWT, Swing, JavaFX & SWT 5
Iron Monkey JFileChooser - Drag and Drop AWT, Swing, JavaFX & SWT 5
Iron Monkey Nach Drag & Drop die Datei auf Komponent darstellen AWT, Swing, JavaFX & SWT 2
M AWT Drag n Drop-Support für Component AWT, Swing, JavaFX & SWT 5
HaukeG Swing Drag & Drop in verschiedenen Varianten AWT, Swing, JavaFX & SWT 4
S Swing Drag&Drop mit TransferHandler und JPanels AWT, Swing, JavaFX & SWT 8
C Swing Simulation von Drag and Drop Events AWT, Swing, JavaFX & SWT 3
H Swing "Drag and Drop" eines JComponent über ein JPanel AWT, Swing, JavaFX & SWT 2
R Drag 'n Drop AWT, Swing, JavaFX & SWT 3
S Selektion bei Drag&Drop AWT, Swing, JavaFX & SWT 4
C Swing Drag and Drop mit Objekten in einem Fenster. AWT, Swing, JavaFX & SWT 9
T SWT Drag&Drop: Eclipse FileTransfer mit Icons AWT, Swing, JavaFX & SWT 14
F Drag & Drop durch Verbindungslinien AWT, Swing, JavaFX & SWT 10
T Swing Drag and Drop - JLabels tauschen statt überschreiben AWT, Swing, JavaFX & SWT 11
S Drag and Drop über 2 Panels AWT, Swing, JavaFX & SWT 2
K JButtons innerhalb eines JPanels verschieben (DRAG&DROP) AWT, Swing, JavaFX & SWT 5
B Drag and Drop AWT, Swing, JavaFX & SWT 6
K Drag and Drop Workbench AWT, Swing, JavaFX & SWT 2
P SWT Eclipse Draw2D Drag and Drop (ruckelt) AWT, Swing, JavaFX & SWT 4
F SWT Drag and Drop im TreeViewer AWT, Swing, JavaFX & SWT 4
Spin JFrame/ Frame Drag and Drop AWT, Swing, JavaFX & SWT 13
A TransferHandler & Drag n' Drop AWT, Swing, JavaFX & SWT 2
R Drag an Drop JTable Zelle AWT, Swing, JavaFX & SWT 6
D Drag & Drop - node.isRoot AWT, Swing, JavaFX & SWT 3
E Swing Drag n Drop Verschieben von Labels o.ä. AWT, Swing, JavaFX & SWT 10
E Swing Beim Drag & Drop, Drag verbieten?! AWT, Swing, JavaFX & SWT 2
E JTree Autoscroll bei Drag and Drop AWT, Swing, JavaFX & SWT 4
F Swing Problem mit Drag&Drop in JTable AWT, Swing, JavaFX & SWT 4
C keine weiteren Events während Drag&Drop Operation möglich? AWT, Swing, JavaFX & SWT 5
E Drag&Drop zwischen 2 Listen AWT, Swing, JavaFX & SWT 5
0 Swing Drag n' Drop Bug wenn Source und Target gleiche Komponente? AWT, Swing, JavaFX & SWT 4
C Drag and Drop JPanel auf JPanel nach drop erneut verschieben? AWT, Swing, JavaFX & SWT 3
M Swing JTable Drag'n'Drop von Dateien AWT, Swing, JavaFX & SWT 3
M Drag and Drop: Quellfenster AWT, Swing, JavaFX & SWT 2
M Buttons per Drag & Drop im GridBagLayout verschieben AWT, Swing, JavaFX & SWT 6
M Swing JList > Drag & Drop AWT, Swing, JavaFX & SWT 2
C Drag an Drop vom JTree zur JTable AWT, Swing, JavaFX & SWT 4
Z Drag and Drop auf Application AWT, Swing, JavaFX & SWT 3
G Drag and Drop JTree to Canvas AWT, Swing, JavaFX & SWT 7
H Drag&Drop von JComponents AWT, Swing, JavaFX & SWT 6
G JTable drag and drop AWT, Swing, JavaFX & SWT 4
H Drag&Drop mit GWT AWT, Swing, JavaFX & SWT 8
B Swing Drag&Drop einzelner Zellen in einer JTable AWT, Swing, JavaFX & SWT 12
A Swing Drag and Drop TreeNode User Object AWT, Swing, JavaFX & SWT 3
P JList: Reihenfolge der Elemente per Drag'n'Drop ändern. AWT, Swing, JavaFX & SWT 9
K Swing Wie ändere ich die default action für Drag&Drop AWT, Swing, JavaFX & SWT 6
R JLayeredPane - Drag&Drop - mouseDragged AWT, Swing, JavaFX & SWT 6
C JTable mit RowSorter und Drag & Drop: Zeile verschieben AWT, Swing, JavaFX & SWT 4
V SWT TreeViewer Drag'n'Drop LocalSelectionTransfer AWT, Swing, JavaFX & SWT 10
R Swing JLayeredPane - Drag&Drop Positionen vertauschen AWT, Swing, JavaFX & SWT 3
F Drag & Drop mit eigenen Komponenten AWT, Swing, JavaFX & SWT 2
B SWT - Drag & Drop innerhalb einer Table AWT, Swing, JavaFX & SWT 3
S Drag'n'Drop AWT, Swing, JavaFX & SWT 8
E Drag&Drop JTable; Renderer füllt alle Zellen AWT, Swing, JavaFX & SWT 10
M Drag & Drop in Swing (createTransferable) AWT, Swing, JavaFX & SWT 6
T Drag Quelle beim Drop AWT, Swing, JavaFX & SWT 6
A Drag & Drop von Zeilen innerhalb einer Tabelle AWT, Swing, JavaFX & SWT 2
E Drag & Drop von jTree in JList AWT, Swing, JavaFX & SWT 5
P Dateien per Drag&Drop ins Java-Fenster ziehen AWT, Swing, JavaFX & SWT 8
G JTree Node ggf. aufklappen bei Drag & Drop? AWT, Swing, JavaFX & SWT 7
J Drag'n Drop imm selben Frame unterbinden AWT, Swing, JavaFX & SWT 3
S Table Row per Drag and Drop in andere Table schieben? AWT, Swing, JavaFX & SWT 14
X wiedermal Drag n Drop AWT, Swing, JavaFX & SWT 2
P Drag & Drop AWT, Swing, JavaFX & SWT 2
X Drag and Drop AWT, Swing, JavaFX & SWT 2
F Drag&Drop Jlist -> JList AWT, Swing, JavaFX & SWT 3
G Drag and Drop mal wieder? AWT, Swing, JavaFX & SWT 2
G Drag And Drop von Component (List, Tree) zum Desktop AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben