JavaFX Interaction. Events Eventhandler Lambda-Ausdrücke

Ähnliche Dokumente
JavaFX Layout and Controls

Einführung in die Programmierung für NF. Übung 08

Einführung in die OOP mit Java

Projekt objektorientiertes programmieren in Java SS08. Event-Handling. Nils Heinrich

Graphische Benutzungsoberflächen mit Java. Einführung in NetBeans

Beispiel: Eine Choice-Liste...

Grafische Benutzeroberflächen mit JavaFX Einführung

Einführung in die Programmierung für NF. Übung

Graphical User Interfaces

Universität Paderborn Prof. Dr. Stefan Böttcher. Abschluss von Kapitel 2: Programmierung Grafischer Oberflächen mit der Swing-Bibliothek

Institut für Programmierung und Reaktive Systeme. GUIs mit Swing. Markus Reschke

Kapitel 8: Grafische Benutzerschnittstellen

Ziele. Kapitel 8: Grafische Benutzerschnittstellen. AWT und Swing. Ziele (2)

Ein erstes "Hello world!" Programm

EAD II Übung 5. Graphische Benutzungsoberfläche mit BlueJ

Benutzeroberflächen. Abstract Windowing Toolkit, Rahmen, Wächter, Ereignisbehandlung, Ausgabe, Menüs.

Programmieren in Java

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik GUI-Programmierung mit Swing

7. Objektorientierung. Informatik II für Verkehrsingenieure

Tag 9: Grafische Benutzeroberflächen

Ereignisse (Events) in Java

Javakurs für Anfänger

Javakurs für Anfänger

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 7. Grafische Benutzeroberflächen 1

Programmiertechnik GUI Programmierung mit Java Swing

Einstieg in die Informatik mit Java

Javakurs für Anfänger

Programmieren in Java

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Heute. Grafische Benutzeroberflächen (Anonyme) innere Klassen Einfache Simulationen main / ausführbare jar-files IT I - VO 11 1

Prof. Dr. Wolfgang Schramm. Vorlesung. Techniken der Programmentwicklung. Exkurs: Anonyme Klassen

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 2. Teil

Medientechnik Sommersemester 2016

Ein Leben ohne Notes Client Sven Hasselbach

Programmieren 2 07 JavaFX-Properties und Data-Binding

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Schlussendlich geben wir die Listen aus. Es kommt zu folgender Ausgabe:

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke

Exkurs: ANONYME KLASSEN. Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm

Vorkurs Informatik WiSe 15/16

Einstieg in die Informatik mit Java

Implementieren von Klassen

Ereignisverwaltung und Layout-Typen

Java Methoden. Informatik 1 für Nebenfachstudierende Grundmodul. Kai-Steffen Hielscher Folienversion: 1. Februar 2017

Graphical User Interfaces mit

Silke Trißl Wissensmanagement in der Bioinformatik. Objektorientierte Programmierung (OOP) Vorstellung wie in der realen Welt: Farbe Hubraum Tank...

Methoden und Klassen. Silke Trißl Wissensmanagement in der Bioinformatik

Deklaration einer Klasse Innere innerhalb Klassen einer in Ja anderen v a Klasse

Design Patterns I. Observer, Listener & MVC

Einführung in die Programmierung für NF. Grafische Benutzeroberflächen

GUI-Programmierung. Teil I. Unterlagen zum Modul OOP mit Java V by MOU2/BFH-TI. Berner Fachhochschule Technik und Informatik

C++ - Objektorientierte Programmierung Vererbung

Programmierkurs Java

Java Vererbung. Inhalt

Info B VL 11: Innere Klassen/Collections

Programmieren 2 07 JavaFX-Properties und Data-Binding

Innere Klassen. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

Repetitorium Informatik (Java)

Einführung in die Informatik - Teil 4b - Zeichnen mit der Maus im JBuilder

JButton, JCheckBox, JRadioButton. Programmieren II. Vorlesung 7. Handout S. 1. Dr. Klaus Höppner. Hochschule Darmstadt Sommersemester 2009.

Kapitel 1: Die ersten Schritte 1

Tag 7 Repetitorium Informatik (Java)

3. Die Programmiersprache Java

Silke Trißl, Prof. Ulf Leser Wissensmanagement in der Bioinformatik. Jede Applikation braucht eine Klasse mit einer main-methode

ADT: Verkettete Listen

... Created by Michael Kirsch & Beat Rossmy

Ereignisse Auf Benutzereingaben reagieren

Rückgabewerte von Methoden

Algorithmen und Datenstrukturen

Programmieren in Java -Eingangstest-

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

JLabel. dient zur Textanzeige. können auch Bilder anzeigen: mylabel.seticon( new ImageIcon( C:/Pfad/zum/Bild.jpg )

Funktionale und Objekt-Orientierte Programmierkonzepte

Praktikum 1: Einführung, BMI Rechner

Was passiert, wenn Button "Ok?" mit Maus angeklickt?

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

Softwaretechnik (Medieninformatik): GUIs mit Swing Überblick

Einstieg in die Informatik mit Java

Theorie zu Übung 8 Implementierung in Java

11. GUI-Programmierung mit SWING Überblick

Entwicklung mit JavaFX

Ein Vortrag im Rahmen des Wahlpflichtmoduls Fortgeschrittene Programmierung mit JAVA

3.3 Konstruktoren und Destruktoren

Softwaretechnik. M. Jakob. 15. März Gymnasium Pegnitz

Kapitel 4: Klassen und Unterklassen

Einführung in GUI-Programmierung. javax.swing

Software Entwicklung 1

Programmieren I. Kapitel 10. Spezielle Features

Web-Techniken Einführung in JavaScript

Kapitel 13. Abstrakte Methoden und Interfaces. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Praktikum 4: Grafiken und Ereignisse

Fragen zur OOP in Java

import java.awt.*; import java.awt.event.*; import javax.swing.*;

Kapitel 7: Ereignis-basierte Kommunikation

Transkript:

JavaFX Interaction Events Eventhandler Lambda-Ausdrücke

Einfache Interaktion (c) schmiedecke 15 Prg-20-Interaktion 2

Interaktion Jedem Control kann Interaktivität hinzugefügt werden Die GUI erkennt verschiedenste Interaktions-Ereignisse Mausklick Mausbewegung, Dragbewegung linke, rechte Maustaste Taste gedrückt, losgelassen Entertaste Selektion... Für jedes Ereignis wird ein von der GUI ein Event-Objekt erzeugt, das die erforderlichen Infos enthält (z.b. "worauf geklickt?") Den Controls können durch "SetOn..."-Methoden Event-Handler hinzugefügt werden. Wir beginnen mit "ActionEvents", wie z.b. Knopfdruck und Enter Die anderen Events kommen später... (c) schmiedecke 15 Prg-20-Interaktion 3

Aktion des Login-Knopfes (c) schmiedecke 15 Prg-20-Interaktion 4

EventHandler des Login-Knopfes LoginHandler ist innere Klasse (in Main05) Zweck: Controls (btn und usertextfield) sollen bekannt sein Beide dürfen aber nicht lokal in start() sein, sondern müssen Attribute werden: (c) schmiedecke 15 Prg-20-Interaktion 5

Die Theorie dahinter: Events Ein Event ist ein Objekt vom Typ Event, in der Regel einer Unterklasse von javafx.event.event Es wird vom FX-Laufzeitsystem für jede Benutzeraktion erstellt. Ein Event-Objekt ist ein "Informationspaket" über ein Ereignis, enthält mindestens gettype, getsource, gettarget Es gibt eine Hierarchie von Event-Typen (c) schmiedecke 15 Prg-20-Interaktion 6

EventHandler Ein EventHandler ist eine Implementierung des Interfaces public interface EventHandler<T extends Event> extends EventListener { void handle(t event); } Es gibt nur die eine Methode handle, der ein Event als Parameter übergeben wird (das "Infopaket"). Ein Eventhandler wird bei einem Node "registriert" und dadurch bei Auftreten eines Ereignisses aufgerufen. mybutton.addeventhandler(actionevent.action, mybuttonhandler); adressierter EventType Instanz von Button Instanz von EventHandler<ActionEvent> (c) schmiedecke 15 Prg-20-Interaktion 7

Beispielcode Login Handler muss "innere Klasse" sein, damit Zugriff auf btn usertextfield und loginmessage besteht (c) schmiedecke 15 Prg-20-Interaktion 8

Kombination von Events und Handlers Praxistür Gong Haustür Tueroeffner oben Tueroeffner unten

Kombination von Events und Handlers public DocsPraxis() { Button hausklingel = new Button("Dr.Java"); Button praxisklingel = new Button("Dr.Java"); EventHandler<ActionEvent> gong = new Gong(); EventHandler<ActionEvent> praxistueroeffner = new Tueroeffner("oben"); EventHandler<ActionEvent> haustuer = new Tueroeffner("unten"); hausklingel.addactionlistener(gong); hausklingel.addactionlistener(haustueroeffner); praxisklingel.addactionlistener(gong); praxisklingel.addactionlistener(praxistueroeffner); } pane.getchildren().add(praxisklingel); pane.getchildren().add(hausklingel);

Die wichtigsten Eventklassen javafx.event.actionevent javafx.scene.input.inputevent javafx.scene.input.keyevent (extends InputEvent) javafx.scene.input.mouseevent (extends InputEvent) javafx.scene.touchevent häufigstes Event Knopfdruck, Doppelklick, Enter Maus- oder Tastenklick Tastenereignisse: Drücken, Lösen, Klicken... Mausereignisse Bewegen, Drag, Maustasten... Toucheingaben javafx.scene.windowevent Änderung des Stage-Zustands Maximieren, Minimieren, Resize... (c) schmiedecke 15 Prg-20-Interaktion 11

Vereinfachte Event-Registrierung "seton..." vereinfachte Registrierung für häufige Event-Typen Beispiel: Grüner Punkt soll bei Mausklick rot werden (c) schmiedecke 15 Prg-20-Interaktion 12

Übersicht Vereinfachte Registrierung http://docs.oracle.com/javafx/2/events/convenience_methods.htm (c) schmiedecke 15 Prg-20-Interaktion 13

(c) schmiedecke 15 Prg-20-Interaktion 14

Allgemeine Form der Registrierung: setonevent-type(eventhandler); statt vereinfacht (c) schmiedecke 15 Prg-20-Interaktion 15

Events auf Nodes Der Scene Graph enthält Nodes Events können auf Nodes registriert werden Shapes sind Nodes d.h. aus jedem "Shape" kann ein Control werden (c) schmiedecke 15 Quelle Rheinjug / Saxonia Prg-19-Panes Systems und Controls / http://youtu.be/hyw4trofgxa 16

Ein Shape als Knopf (c) schmiedecke 15 Prg-20-Interaktion 17

Projekt Scribble Malen mit der Maus Scribble-Idee: Group als Root Rectangle als Untergrund Darauf Lines: Starten, wenn Mausknopf gedrückt (kleiner Kreis) Bei jedem MouseDragged-Event kleines Stück Linie erzeugen (Line-Objekt) und hinzufügen Wenn Mausknopf gelöst, endet die Linie (kleiner Kreis) (c) schmiedecke 15 Prg-20-Interaktion 18

Project Scribble (c) schmiedecke 15 Prg-20-Interaktion 19

Project Scribble (c) schmiedecke 15 Prg-20-Interaktion 20

Anonyme innere Klasse Viel unnötiger Code: Der Klassenname wird nur 1x benötigt! Deshalb üblicherweise anonyme innere Klasse: Deklaration und Instanziierung in einem Schritt Brrrr - hässlich, aber üblich! (c) schmiedecke 15 Prg-20-Interaktion 21

Die elegante Lambda-Lösung Dies ist ein Überfall Vorgriff - Theorie folgt später Ein Lambda-Ausdruck ist eine namenlose Methode (also etwas Anonymes), die (als Objekt) weitergegeben werden kann (Heißt in Skriptsprachen Closure) Syntax in Java 8: Parameterliste -- Pfeil -- Methodenrumpf (MouseEvent public void handle(mouseevent event) -> event) { x=event.getx(); y=event.gety(); root.getchildren().add(new Circle(x,y,3,Color.BLUE)); } Als Methode nicht weitergebbar müsste noch in eine Klasse gekapselt werden. Lambda-Ausdrücke haben so eine (unsichtbare) Kapsel (c) schmiedecke 15 Prg-20-Interaktion 22

Lambda statt anonym (c) schmiedecke 15 Prg-20-Interaktion 23

Guter Stil: private Methode Keine innere Klasse mehr, nur noch eine private Methode (c) schmiedecke 15 Prg-20-Interaktion 24

Lambda für Scribble (c) schmiedecke 15 Prg-20-Interaktion 25

Noch Lust auf eine ComboBox? in "handle" sichtbar setzen... (c) schmiedecke 15 Prg-20-Interaktion 26

Das gibt Ihnen schon ganz viele Möglichkeiten Was fehlt? Dynamische Werte durch Properties Navigation und Message Panes