Also ich habe ein ähnliches Problem, und zwar versuche ich eine Art Drag&Drop zu implementieren. Ich halte den MouseButton auf ein JLabel gedrückt und erzeuge ein JWindow oder ein JFrame (ich erwähne beides, da keines den gewünschten Erfolg brachte), wobei nun bei gedrückt gehaltenen Button der Focus auf eine JComponent auf dem erzeugten JWindow/JFrame gesetzt werden soll.
Hat jemand vll einen kleinen Code-Schnippsel parat?
Das ein JLabel den Focus nicht bekommen, kam mir so langsam zwar auch in den Sinn, aber dennoch steht mir ja requestFocus() zur Verfügung. Wie kann ich es denn umsetzen, dass wenn bei gedrückten MouseButton ein Window mit einem Label darauf erzeugt wird und ich dann OHNE neu auf das window(oder einer der sich darauf befindlichen components) zu klicken, ich mit der Maus das Window weiter bewegen kann? MouseListener geht ja bei Label. Und es funktioniert auch sonst alles, nur ich muß bis jetzt auf das Label auf dem erzeugten Window neu klicken, um es zu bewegen.
MouseMotionListener → mouseDragged → setLocation
Den Listener hängen wir an das Original. Wenn nötig, können wir das MouseEvent mit dispatchEvent auch an JWindow weiterleiten, das dann auch einen Listener bekommen muss.
Ich hab das jetzt mal mit dem dispatchEvent probiert, aber ich würde es auch gern ohne hinbekommen und das nur über das window regeln.
Wenn ich das mit dispatchEvent mache, dann bekomme ich folgende Exception :
“Exception in thread “AWT-EventQueue-0” java.lang.StackOverflowError”
Ich reiche jetzt vorerst das event über window.mouseDragged(event) weiter.
Den Focus habe ich auf das Window gesetzt bekommen, aber leider bringt das wohl nichts allein, da das MouseEvent immer noch vom MainComponent ausgelöst wird. Kann ich nicht irgendwie da etwas manipulieren?
Danke Andre, vom Prinzip her habe ich es auch jetzt genauso gemacht. Hätte halt nur gern die source-component etwas außen vor gelassen, so dass ich nur den MouseMotionListener des window genutzt hätte.