Drag and Drop über 2 Panels

student20

Mitglied
Hey , ich hab da ein Drag and Drop Problem, bei dem ich nicht weiter komme.
Ich habe 2 JPanels, Panel1 und Panel2. Auf Panel1 liegt nun ein BufferedImage, welches ich verschieben möchte. Also habe ich mit Mouse- und MouseMotionListeners gearbeitet, wobei der MouseListener überprüft ob Koordinaten der Maus, mit dem des Image übereinstimmen, ein Flag setzt und von dort in der Methode mouseDragged(...) durch Übergabe der Mauskoordinaten "verschoben" wird. Sobald das Image die Grenzen des Panel1 überschreitet, wird ein SubImage des BufferedImage mit dem "fehlenden" Teil erstellt und auf Panel2 angezeigt. Wenn das Image vollständig im Panel2 ist, dachte ich mir, übergebe ich das Image dem Panel2 und lösche es aus Panel1, setze das Flag im Panel1 zurück, um den MotionListener zu deaktivieren und rufe die Methode
Code:
activateMotionListener(Image image)
auf, welche das Image übergibt, dass weiterhin verschoben werden soll und das Flag in Panel2 aktiviert,um die Methode mouseDragg(...) dort freizugeben.
Das Problem ist aber nun, Panel2 hat quasi niemals mitbekommen, dass die Maustaste gedrückt wurde, da dies in Panel1 geschah, wodurch mir keine Koordinaten über das MouseEvent von mouseDragged(...) übergeben werden.
Wie kann ich dem Panel2 klar machen, dass die Maus gedrückt ist ?
 
hört sich komplex an. Warum die zwei Panel? Wenn man das Bild sowieso beliebig hin und her schieben kann, warum realisiert man das nicht mit einem Panel?
Ansonsten: Könnte man die MouseListener statt direkt an die Panels einfach nur an deren Container registrieren?
 
Naja ich habe 2 Panels genommen, da das eine Panel eine feste Größe haben soll und das anderer ein JScrollPane ist, auf dem ein JPanel liegt. Dabei soll sich dementsprechend die Fläche vergrößern, wenn mehrer Images auf dem Panel sind und dementsprechend beliebig gescrollt werden kann, wobei der Bereich auf dem anderen Panel unverändert bleibt. Und da ist dann auch das Problem wenn ich die Listener an den Container darüber (JFrame) registrieren. Es werden keine Klicks "akzeptiert", die auf dem Panel des JScrollpane liegen.

Wenn ich dieses Problem allerdings so lösen könnte, dass ich quasi nur über ein bestimmten Bereich scrolle anstatt über die ganze Fläche, könnte ich auch ein JPanel benutzen. Allerdings hab ich dazu auch keine idee =/.
 
Zuletzt bearbeitet:

Zurück
Oben