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