


















Besser lernen dank der zahlreichen Ressourcen auf Docsity
Heimse Punkte ein, indem du anderen Studierenden hilfst oder erwirb Punkte mit einem Premium-Abo
Prüfungen vorbereiten
Besser lernen dank der zahlreichen Ressourcen auf Docsity
Download-Punkte bekommen.
Heimse Punkte ein, indem du anderen Studierenden hilfst oder erwirb Punkte mit einem Premium-Abo
Community
Finde heraus, welche laut den Docsity-Nutzern die besten Unis deines Landes sind
Kostenlose Leitfäden
Lade unsere Leitfäden mit Lernmethoden, Hilfen zur Angstbewältigung und von Docsity-Tutoren erstellte Tipps zum Verfassen von Haus- und Abschlussarbeiten kostenlos herunter
Folien zur Vorlesung Einführung in die Programmierung für Nebenfach Medieninformatik, Prof. Hußmann, WS 2019/2020
Art: Slides
1 / 26
Diese Seite wird in der Vorschau nicht angezeigt
Lass dir nichts Wichtiges entgehen!
Created by Michael Kirsch & Beat Rossmy
Imports Node Graph
Wie können wir einen Loop erzeugen?
Was sind Anonyme Klassen? Wie können wir nun den Kreis bewegen?
Wie können wir auf Tasteneingaben reagieren?
IMPORTSIMPORTS
Imports binden Funktionalitäten von Entwicklern ein.
import javafx.application.Application; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.shape.Circle; import javafx.stage.Stage;
public class Main extends Application { Circle ball;
public void start(Stage primaryStage) throws Exception{ Group root = new Group(); ball = new Circle (100,100,50); root.getChildren().add(ball);
primaryStage.setTitle("Pong"); primaryStage.setScene(new Scene(root, 300, 275)); primaryStage.show(); }
public static void main(String[] args) {launch(args);} }
NODE GRAPHNODE GRAPH
Der Node Graph enthält
alle UI Elemente.
Die "Leafs" des Graphen
sind dabei die sichtbaren
Elemente.
Die "Branches" stellen
strukturierende Elemente
dar, die wiederum Nodes
als Kinder haben.
https://docs.oracle.com/javafx/2/scenegraph/jfxpub-scenegraph.htm
WIE KÖNNEN WIR EINEN LOOPWIE KÖNNEN WIR EINEN LOOP
ERZEUGEN?ERZEUGEN?
Betrachten wir den bisherigen Code können wir bereits in start,
ähnlich wie in setup unsere Applikation initialisieren.
Wo führen wir nun aber unseren draw Loop aus?
Die auf der vorherigen Folie demonstrierte Methode über eine
nicht endene while Schleife einen Loop zu erzeugen, in dem
wir unsere Animationen zeichnen können ist möglich, bietet
aber einige Nachteile.
Besser ist es auf von JavaFX vorgefertigte Methodiken
zurückzugreifen.
Für diesen Fall bietet JavaFX die Klasse AnimationTimer, die
Code in einem gleichmäßigen Zeitabstand wiederholt.
Dieser wird typischerweise wie folgend eingebunden.
public void start(Stage primaryStage) throws Exception{ // setup Group root = new Group(); ball = new Circle (100,100,50); root.getChildren().add(ball); primaryStage.setTitle("Pong"); primaryStage.setScene(new Scene(root, 300, 275)); primaryStage.show();
// draw new AnimationTimer () { public void handle (long currentNanoTime) { /* hier könnte unser Code stehen */ } }.start(); }
//... }
WAS SIND ANONYME KLASSEN?WAS SIND ANONYME KLASSEN?
Anonyme Klassen erlauben es uns Variationen von Klassen
während der Initialisierung eines Objekts zu erzeugen.
Beim Konstruktoraufruf haben wir die Möglichkeit die
verwendete Klasse zu überschreiben.
Das bedeutet bereits angelegte Funktionalität kann abgeändert
werden, aber keine neue hinzugefügt.
Das liegt daran, dass der Datentyp der Elternklasse diese
Funktionalität nicht enthält und daher nicht auf diese verwiesen
werden kann.
Der Code kann noch weiter verknappt werden.
public class XXX { int x;
public XXX () {}
void doSomething () { System.out.println("do something"); } }
public class Main { public static void main (String [] args) { new XXX () { @Override void doSomething() { System.out.println("do something else"); } }.doSomething(); // -> "do something else" } }
public void start(Stage primaryStage) throws Exception{ // setup Group root = new Group(); ball = new Circle (100,100,50); root.getChildren().add(ball); primaryStage.setTitle("Pong"); primaryStage.setScene(new Scene(root, 300, 275)); primaryStage.show();
// draw new AnimationTimer () { public void handle (long currentNanoTime) { /* hier könnte unser Code stehen */ } }.start(); }
//... }
WIE KÖNNEN WIR NUN DEN KREISWIE KÖNNEN WIR NUN DEN KREIS
BEWEGEN?BEWEGEN?