class: center, middle, first # Software-Entwicklung 2 ### JavaFX: Events --- # Fragen? > Fragen zur letzten Vorlesung? --- # Themen * Event handling * Theorie * Praxis --- # Einführung * Events erlauben Interaktion mit der Anwendung * Ausgelöst z.B. durch: * Maus * Tastatur * Touch --- # Allgemein ### Event-Eigenschaften * **Event type**: z.B. Maus gedrückt, Taste gedrückt, etc. * **Source**: Herkunft des Events --> UI-Control. * **Target**: Node auf dem der Event ausgeführt wurde und End-Node in der Event-Dispatch-Chain. --- # Event Delivery Process 1. **Target selection**: Herausfinden des Ziel-Nodes, basierend auf Event-Typ. 2. **Route construction**: Erstellen der Event-Route. 3. **Event capturing**: Event wird vom Root-Node zum Target abgeschickt. Anwenden von Filtern. 4. **Event bubbling**: Event kehrt zu Root zurück. Aufruf der Event-Handler. --- # Event Delivery Process **1. Target selection**
_Quelle: [Oracle: Event Processing][oracletut]_ --- # Event Delivery Process **2. Route construction**
_Quelle: [Oracle: Event Processing][oracletut]_ --- # Event Delivery Process **3. Event capturing**
_Quelle: [Oracle: Event Processing][oracletut]_ --- # Event Delivery Process **4. Event bubbling**
_Quelle: [Oracle: Event Processing][oracletut]_ --- # Event handling * Filter Kann z.B. verhindern, dass Child-Nodes Events empfangen. * **Handler** Implementierung der Ereignisverarbeitung. --- # Implementierung Allgemein: Hinzufügen eines Event-Handlers zu einer Node: ```java nodeName.setOnEVENTTYPE(EventHandler super EVENTCLASS> value); ``` Auflistung sämtlicher Event-types: https://docs.oracle.com/javase/8/javafx/events-tutorial/convenience_methods.htm --- # Beispiel - Anonyme Innere Klasse ```java Button btn1 = new Button("Hello"); btn1.setOnAction(new EventHandler
() { @Override public void handle(ActionEvent event) { btn1.setText("Clicked"); } }); ``` --- # Beispiel - Lambda ```java Button btn2 = new Button("2"); btn2.setOnAction(event -> btn2.setText("Clicked")); ``` --- # Beispiel - Filter ```java Button btn2 = new Button("2"); btn2.addEventFilter(ActionEvent.ACTION, new EventHandler
() { @Override public void handle(Event event) { event.consume(); } }); btn2.setOnAction( event -> btn2.setText("Clicked")); ``` Was passiert wenn `btn2` gedrückt wird? --- # Beispiel - Draggable Panel with Filters
Nach dem drag:
_Quelle: [Oracle: Event Processing][oracletut]_ --- # Beispiel - Draggable Panel with Filters: Code
Spezielle Filter kommen vor den allgemeinen Filtern! Hierarchie beachten! _Quelle: [Oracle: Event Processing][oracletut]_ --- class: center, middle # Fragen? [oracletut]: https://docs.oracle.com/javase/8/javafx/events-tutorial/processing.htm#CEGJAAFD