api:documentation:grafik:mausereignisse
no way to compare when less than two revisions
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
— | api:documentation:grafik:mausereignisse [2024/08/31 10:03] (aktuell) – angelegt - Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== Reagieren auf Maus- und Tastaturereignisse (Event-Handler) ====== | ||
+ | <WRAP center round info 100%> | ||
+ | Jedes graphische Objekt (d.h. jede von '' | ||
+ | * **onMouseDown(int key)** \\ wird aufgerufen, wenn sich der Mauszeiger über dem Objekt befindet und eine Maustaste **heruntergedrückt** wurde. '' | ||
+ | * **onMouseUp(int key)** \\ wird aufgerufen, wenn sich der Mauszeiger über dem Objekt befindet und eine Maustaste **losgelassen** wurde. '' | ||
+ | * **onMouseEnter()** \\ wird aufgerufen, wenn der Mauszeiger sich in das Objekt **hineinbewegt**. | ||
+ | * **onMouseLeave()** \\ wird aufgerufen, wenn der Mauszeiger sich aus dem Objekt **herausbewegt**. | ||
+ | * **onKeyDown(String key)** \\ wird aufgerufen, wenn eine Taste der Tastatur gerade **heruntergedrückt** wurde. | ||
+ | * **onKeyUp(String key)** \\ wird aufgerufen, wenn eine Taste der Tastatur gerade **losgelassen** wurde. | ||
+ | * **onKeyTyped(String key)** \\ wird aufgerufen, wenn eine Taste der Tastatur angeschlagen (heruntergedrückt und losgelassen) wurde. Der Unterschied zu '' | ||
+ | |||
+ | Diese Methoden der Grafikobjekte ('' | ||
+ | - Schreibe eine eigene Klasse, die Unterklasse einer graphischen Klasse ist (z.B. '' | ||
+ | - Überschreibe nun in dieser Klasse eine oder mehrere der obigen Methoden. Diese Methoden nennt man **Ereignishandler**. | ||
+ | - Wir eines der Ereignisse ausgelöst, so wird jetzt **deine** dazugehörige Methode aufgerufen und der Programmcode darin ausgeführt. | ||
+ | |||
+ | Das klingt jetzt vielleicht kompliziert, | ||
+ | |||
+ | </ | ||
+ | |||
+ | < | ||
+ | <div style=" | ||
+ | </ | ||
+ | ===== Beispiel 1: Überschreiben der onMouseDown-Methode ===== | ||
+ | Stelle die Geschwindigkeit auf maximal, starte das Programm und klicke zuerst mit der linken Maustaste, dann mit der rechten Maustaste auf die Quadrate! | ||
+ | < | ||
+ | <div class=" | ||
+ | <script type=" | ||
+ | new World(1000, 1000); | ||
+ | |||
+ | for(int i = 0; i < 10; i++) { | ||
+ | | ||
+ | new ClickQuadrat(100 * i + 10, 100 * j + 10, 80); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | while(true){ } | ||
+ | |||
+ | class ClickQuadrat extends Rectangle { | ||
+ | |||
+ | | ||
+ | super(x, y, breite, breite); | ||
+ | setFillColor(Color.white); | ||
+ | } | ||
+ | |||
+ | | ||
+ | if(key == 0) { | ||
+ | | ||
+ | } else { | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Beispiel 2: Drehen eines Dreiecks mit den Tasten r und l ===== | ||
+ | Stelle die Programmgeschwindigkeit auf maximal, starte das Programm und drücke die Tasten r oder l. Probiere auch aus, was passiert, wenn Du die Tasten für längere Zeit hältst! | ||
+ | | ||
+ | Falls das Programm nicht reagiert, hat vielleicht irgendein anderes Control im Browser den Tastaturfokus. Klicke in diesem Fall einfach einmal mit der Maus in den Grafikbereich, | ||
+ | < | ||
+ | <div class=" | ||
+ | <script type=" | ||
+ | new World(1000, 1000); | ||
+ | new Zeiger(); | ||
+ | |||
+ | while(true) { } | ||
+ | |||
+ | class Zeiger extends Triangle { | ||
+ | |||
+ | | ||
+ | super(450, 600, 550, 600, 500, 300); | ||
+ | } | ||
+ | |||
+ | | ||
+ | if(key == " | ||
+ | | ||
+ | } | ||
+ | if(key == " | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | |||
+ | }</ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ===== Beispiel 3: Überschreiben der onMouseEnter/ | ||
+ | Setze die Geschwindigkeit auf maximal, starte das Programm und fahre mit der Maus über die Quadrate! | ||
+ | < | ||
+ | <div class=" | ||
+ | <script type=" | ||
+ | new World(1000, 1000); | ||
+ | |||
+ | for(int i = 0; i < 10; i++) { | ||
+ | | ||
+ | new MouseOverQuadrat(100 * i + 10, 100 * j + 10, 80); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | while(true){ } | ||
+ | |||
+ | class MouseOverQuadrat extends Rectangle { | ||
+ | |||
+ | | ||
+ | super(x, y, breite, breite); | ||
+ | setFillColor(Color.white); | ||
+ | } | ||
+ | |||
+ | | ||
+ | | ||
+ | | ||
+ | } | ||
+ | |||
+ | | ||
+ | | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ===== Beispiel 4: Drag and Drop ===== | ||
+ | Durch geschickte Nutzung der obigen Handler lässt sich Drag and Drop per Maus verwirklichen: | ||
+ | |||
+ | < | ||
+ | <div class=" | ||
+ | <script type=" | ||
+ | println(" | ||
+ | new DraggableRectangle(100, | ||
+ | |||
+ | |||
+ | class DraggableRectangle extends Rectangle { | ||
+ | |||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | |||
+ | |||
+ | | ||
+ | if(state == " | ||
+ | | ||
+ | | ||
+ | state = " | ||
+ | | ||
+ | | ||
+ | } | ||
+ | |||
+ | | ||
+ | } | ||
+ | |||
+ | | ||
+ | if(state != " | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | |||
+ | | ||
+ | if(state != " | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | |||
+ | | ||
+ | if(state == " | ||
+ | | ||
+ | | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | |||
+ | | ||
+ | state = " | ||
+ | stopTrackingEveryMouseMovement(); | ||
+ | getWorld().setCursor(" | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
api/documentation/grafik/mausereignisse.txt · Zuletzt geändert: 2024/08/31 10:03 von 127.0.0.1