====== Maussteuerung ======
Es gibt grundsätzlich zwei Ansätze, um auf Mausereignisse zu reagieren:
===== a) Reaktion auf Mausereignisse durch Überschreiben von Ereignishandlern eines grafischen Objekts =====
Jedes graphische Objekt hat die Methoden
* ''onMouseEnter(double x, double y)'' (wird aufgerufen, wenn sich der Mauszeiger in das Objekt hineinbewegt)
* ''onMouseLeave(double x, double y)'' (wird aufgerufen, wenn sich der Mauszeiger aus dem Objekt hinausbewegt)
* ''onMouseDown(double x, double y, int key)'' (wird aufgerufen, wenn sich der Mauszeiger über dem Objekt befindet und eine der Maustasten gedrückt wurde)
* ''onMouseUp(double x, double y, int key)'' (wird aufgerufen, wenn sich der Mauszeiger über dem Objekt befindet und eine der Maustasten losgelassen wurde)
* ''onMouseMove(double x, double y)'' (wird aufgerufen, wenn sich der Mauszeiger über dem Objekt befindet und bewegt)
Diese Methoden kann man in einer Unterklasse überschreiben und so auf die entsprechenden Ereignisse reagieren. \\ \\
**Tipps:**
* Die Parameter ''x'' und ''y'' der Ereignishandler sind die Koordinaten des Mauszeigers zum Zeitpunkt des Ereignisses \\ \\
* ''key == 0'' bedeutet linke Maustaste, ''key == 1'' bedeutet mittlere Maustaste und ''key == 2'' bedeutet rechte Maustaste. \\ \\
* Die Methode ''startTrackingEveryMouseMovement'' bewirkt, dass fortan **jedes** Mausereignis zum Aufruf des entsprechenden Ereignishandlers beim Objekt führt, auch wenn sich der Mauszeiger außerhalb des Objekts befindet. \\ \\
* Die Methode ''stopTrackingEveryMouseMovement'' beschränkt die Mausereignisse wieder auf diejenigen innerhalb des Objekts. \\ \\
===== Beispiel 1: Verschieben von Rechtecken mit der Maus =====
Starte das Programm und verschiebe die Rechtecke mit der Maus!
===== b) Registrieren eines MouseListeners beim World-Objekt =====
Das Interface ''MouseListener'' besitzt Methoden
* ''void onMouseDown(double x, double y, int button)'' (wird aufgerufen, wenn eine Maustaste nach unten gedrückt wird)
* ''void onMouseUp(double x, double y, int button)'' (wird aufgerufen, wenn eine Maustaste losgelassen wird)
* ''void onMouseMove(double x, double y)'' (wird aufgerufen, wenn der Mauszeiger sich bewegt)
* ''void onMouseEnter(double x, double y)'' (wird aufgerufen, wenn der Mauszeiger sich in den Grafikbereich hineinbewegt)
* ''void onMouseLeave(double x, double y)'' (wird aufgerufen, wenn der Mauszeiger sich aus dem Grafikbereich hinausbewegt)
Dabei bedeutet ''button == 1'': linke Maustaste, ''button == 2'': mittlere Maustaste und ''button == 3'': rechte Maustaste. \\ \\
Wird das Objekt einer Klasse, die ''MouseListener'' implementiert, beim ''World''-Objekt mittels seiner Methode ''addMouseListener'' registriert, so werden die obigen Methoden aufgerufen, wenn die jeweiligen Mausereignisse auf dem Grafikbereich auftreten.
===== Beispiel 2: Mauszeigerspur =====
Starte das Programm und fahre mit der Maus über den Grafikausgabebereich! Probiere auch die linke Maustaste aus.