71
JavaFx 2.0 @mobileLarson @_openKnowledge Lars Röwekamp | open knowledge GmbH

JavaFX - Jetzt nun doch oder besser nicht?

Embed Size (px)

DESCRIPTION

Und ewig grüßt das Murmeltier: Zum wiederholten Male tritt JavaFX an, die Java-UI-Welt zu (r)evolutionieren. Würde nicht Oracle mit seiner geballten Macht dahinter stehen, könnte man diese Ankündigung getrost ignorieren – aber so? Die Session zeigt die neuen Ansätze von JavaFX 2 und warum es doch zu einem Erfolg werden könnte. Und das auf (fast) allen Plattformen – Desktop, Web und Mobile.Speaker: Lars Röwekamp

Citation preview

Page 1: JavaFX - Jetzt nun doch oder besser nicht?

JavaFx 2.0

@mobileLarson @_openKnowledge

Lars Röwekamp | open knowledge GmbH

Page 2: JavaFX - Jetzt nun doch oder besser nicht?

775

Java UI Welt ist noch in gewohnter Ordnung (Swing, SWT)

JavaFX 1.0: Launch

JavaOne: Erste JavaFX Ankünding (a.k.a. F3)

JavaOne: Zweite JavaFX Ankünding

2006 2007 2008 2009 2010

JavaOne: JavaFX 1.2 Launch

Preview SDK

Mobile a.k.a. JavaFX 1.1

Mobile Runtine (WM)

JavaFX 1.3: Preview

JavaFx History

Page 3: JavaFX - Jetzt nun doch oder besser nicht?

775

Java UI Welt ist noch in gewohnter Ordnung (Swing, SWT)

JavaFX 1.0: Launch

JavaOne: Erste JavaFX Ankünding (a.k.a. F3)

JavaOne: Zweite JavaFX Ankünding

2006 2007 2008 2009 2010

JavaOne: JavaFX 1.2 Launch

Preview SDK

Mobile a.k.a. JavaFX 1.1

Mobile Runtine (WM)

JavaFX 1.3: Preview

JavaFx History

Page 4: JavaFX - Jetzt nun doch oder besser nicht?

775

JavaFx 2.0

Page 5: JavaFX - Jetzt nun doch oder besser nicht?

775

JavaFx 2.0JavaFX 2.0 is the next step in the evolution of Java as a rich client platform. It is designed to provide a modern Java environment that shortens the development time and eases the deployment of data driven business and enterprise client applications. Starting with version 2.0, JavaFX applications are completely developed in Java, which has become ubiquitous with over 9 million developers worldwide.

Page 6: JavaFX - Jetzt nun doch oder besser nicht?

775

JavaFX 2.0 is the next step in the evolution of Java as a rich client platform. It is designed to provide a modern Java environment that shortens the development time and eases the deployment of data driven business and enterprise client applications. Starting with version 2.0, JavaFX applications are completely developed in Java, which has become ubiquitous with over 9 million developers worldwide.

JavaFx 2.0

Page 7: JavaFX - Jetzt nun doch oder besser nicht?

775

?

Page 8: JavaFX - Jetzt nun doch oder besser nicht?

775

JavaFxTooling

UI DesignHot

`r N

ot

?

Page 9: JavaFX - Jetzt nun doch oder besser nicht?

775

JavaFxTooling

UI DesignHot

`r N

ot

?

Page 10: JavaFX - Jetzt nun doch oder besser nicht?

775

Demo(s)

Page 11: JavaFX - Jetzt nun doch oder besser nicht?

775

JavaFx 2.0

Page 12: JavaFX - Jetzt nun doch oder besser nicht?

775

Page 13: JavaFX - Jetzt nun doch oder besser nicht?

775

JavaFx 2.0

Page 14: JavaFX - Jetzt nun doch oder besser nicht?

775

(Quelle: fxexperience)

JavaFx 2.0

Page 15: JavaFX - Jetzt nun doch oder besser nicht?

775

JavaFx 2.0

Page 16: JavaFX - Jetzt nun doch oder besser nicht?

775

JavaFx 2.0

Page 17: JavaFX - Jetzt nun doch oder besser nicht?

775

JavaFx 2.0

Page 18: JavaFX - Jetzt nun doch oder besser nicht?

775

> Java API for JavaFX> Built-in UI Controls & Charts> Graphic Engine> Media Engine> Web Engine> „kind of“ Open Source

JavaFx 2.0

Page 19: JavaFX - Jetzt nun doch oder besser nicht?

775

JavaFx 2.0

Page 20: JavaFX - Jetzt nun doch oder besser nicht?

775

Kickstart

Page 21: JavaFX - Jetzt nun doch oder besser nicht?

775

Kickstart

Page 22: JavaFX - Jetzt nun doch oder besser nicht?

775

Kickstart

Page 23: JavaFX - Jetzt nun doch oder besser nicht?

775

> JavaFX Application> Stages & Scenes > Groups & Nodes> Effects & Animations

Kickstart

Page 24: JavaFX - Jetzt nun doch oder besser nicht?

775

// CREATE AN APPLICATION public class ColorfulCircles extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) { primaryStage.show(); } }

Kickstart

Page 25: JavaFX - Jetzt nun doch oder besser nicht?

775

Kickstart

Page 26: JavaFX - Jetzt nun doch oder besser nicht?

775

// ADD A SCENE public class ColorfulCircles extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage primarystage) { Group root = new Group(); Scene scene = new Scene(root, 800, 600, Color.BLACK); primaryStage.setScene(scene); primaryStage.show(); } }

Kickstart

Page 27: JavaFX - Jetzt nun doch oder besser nicht?

775

Kickstart

Page 28: JavaFX - Jetzt nun doch oder besser nicht?

775

// ADD SOME GRAPHICS @Override public void start(Stage primarystage) { ... // scene with root already set // add 30 circles Group circles = new Group(); for (int i = 0; i < 30; i++) { Circle circle = new Circle(150, Color.web("white",0.05)); circle.setStrokeType(StrokeType.OUTSIDE); circle.setStroke(Color.web("white", 0.16)); circle.setStrokeWidth(4); circles.getChildren().add(circle); } root.getChrildren().add(circles); primaryStage.show(); }

Kickstart

Page 29: JavaFX - Jetzt nun doch oder besser nicht?

775

Kickstart

Page 30: JavaFX - Jetzt nun doch oder besser nicht?

775

// ADD VISUAL EFFECTS @Override public void start(Stage primarystage) {

... Group circles = new Group(); for (int i = 0; i < 30; i++) { ... circles.getChildren().add(circle); } circles.setEffect(new BoxBlur(10, 10, 3));

root.getChrildren().add(circles); primaryStage.show(); }

Kickstart

Page 31: JavaFX - Jetzt nun doch oder besser nicht?

775

Kickstart

Page 32: JavaFX - Jetzt nun doch oder besser nicht?

775

// ADD GRADIENT Rectangle colors = new Rectangle(scene.getWidth(), scene.getHeight(), new LinearGradient(0f, 1f, 1f, 0f, true, CycleMethod.NO_CYCLE, new Stop[]{ new Stop(0, Color.web("#f8bd55")), new Stop(0.14, Color.web("#c0fe56")), new Stop(0.28, Color.web("#5dfbc1")), new Stop(0.43, Color.web("#64c2f8")), new Stop(0.57, Color.web("#be4af7")), new Stop(0.71, Color.web("#ed5fc2")), new Stop(0.85, Color.web("#ef504c")), new Stop(1, Color.web("#f2660f")),})); root.getChildren().add(colors);

Kickstart

Page 33: JavaFX - Jetzt nun doch oder besser nicht?

775

Kickstart

Page 34: JavaFX - Jetzt nun doch oder besser nicht?

775

Kickstart

Page 35: JavaFX - Jetzt nun doch oder besser nicht?

775

root.getChildren().add(colors); root.getChildren().add(circles); // APPLY A BLEND MODE Group blendModeGroup = new Group(new Group(new Rectangle(scene.getWidth(), scene.getHeight(),Color.BLACK), circles), colors);

colors.setBlendMode(BlendMode.OVERLAY);

root.getChildren().add(blendModeGroup); primaryStage.show();

Kickstart

Page 36: JavaFX - Jetzt nun doch oder besser nicht?

775

Kickstart

Page 37: JavaFX - Jetzt nun doch oder besser nicht?

775

Kickstart

Page 38: JavaFX - Jetzt nun doch oder besser nicht?

775

// ADD ANIMATION Timeline timeline = new Timeline(); for (Node circle: circles.getChildren()) { timeline.getKeyFrames().addAll( new KeyFrame(Duration.ZERO, // set start pos at 0 new KeyValue(circle.translateXProperty(), random() * 800), new KeyValue(circle.translateYProperty(), random() * 600) ), new KeyFrame(new Duration(40000), // set end pos at 40s new KeyValue(circle.translateXProperty(), random() * 800), new KeyValue(circle.translateYProperty(), random() * 600) ) ); } // play 40s of animation timeline.play();

Kickstart

Page 39: JavaFX - Jetzt nun doch oder besser nicht?

775

Kickstart

Page 40: JavaFX - Jetzt nun doch oder besser nicht?

775

JavaFxTooling

UI DesignHot

`r N

ot

?

Page 41: JavaFX - Jetzt nun doch oder besser nicht?

775

Java

FxTooling

UI DesignHot `r Not

?

Page 42: JavaFX - Jetzt nun doch oder besser nicht?

775

> 50+ Build-In Controls & Layouts> Model/View-Binding > Event Handling> Drag & Drop Support> Effects & Animations> FXML & CSS 3

UI Design

Page 43: JavaFX - Jetzt nun doch oder besser nicht?

775

UI Controls

Page 44: JavaFX - Jetzt nun doch oder besser nicht?

775

> Label ... HTMLEditor ... Charts > extends Node> Animation, Effects, Transformation> Styling via CSS> Integration with Swing ( & SWT)

UI Controls

Page 45: JavaFX - Jetzt nun doch oder besser nicht?

775

> via Property & Binding Classes> IntegerProperty, DoubleProperty ...

> Bindings, NumberBindings, ...

> via Observable & Listener> Observable, ObservableValue

> Change- & InvalidationListener

> Lists, Maps, Collections

(UI) Binding

Page 46: JavaFX - Jetzt nun doch oder besser nicht?

775

(UI) Binding

Page 47: JavaFX - Jetzt nun doch oder besser nicht?

775

(UI) Binding // String binding Label label = new Label(); label.textProperty().bind(new StringBinding() { { bind(dateField.textProperty()); } @Override protected String computeValue() { Date date = format.parse(dateField.getText()); return "You were born " + format.format(date); } });

Page 48: JavaFX - Jetzt nun doch oder besser nicht?

775

> Drag, Key, Mouse, Scroll ...> EventHandler, EventFilter> Event Delivery Process

> Target Selection

> Route Construction

> Event Capturing

> Event Bubbling

Event Handling

Page 49: JavaFX - Jetzt nun doch oder besser nicht?

775

> Blend, Bloom, Blur> Shadows, Reflection, Lighting> Translation, Rotation, Scaling> Transition, Timelines, Keyframes> Effect Chains

Effects & Animations

Page 50: JavaFX - Jetzt nun doch oder besser nicht?

775

Effects & Animations

(Quelle: glyphsoft)

Page 51: JavaFX - Jetzt nun doch oder besser nicht?

775

> UI Deklaration > XML-based, Scriptable> Controller „Binding“> Action „Binding“> @FXML Annotation

FXML & CSS 3

Page 52: JavaFX - Jetzt nun doch oder besser nicht?

775

Kickstart II

Page 53: JavaFX - Jetzt nun doch oder besser nicht?

775

FXML & CSS 3

(Quelle: glyphsoft)

Page 54: JavaFX - Jetzt nun doch oder besser nicht?

775

FXML & CSS 3

> UI Declaration

Page 55: JavaFX - Jetzt nun doch oder besser nicht?

775

FXML & CSS 3

> UI Declaration

<?xml version="1.0" encoding="UTF-8"?> <?import javafx.scene.layout.*?> ... <BorderPane xmlns:fx="http://javafx.com/fxml">

<top> ... </top> <center> <GridPane ... > <children> ... </children> </GridPane> </center> </BorderPane>

Page 56: JavaFX - Jetzt nun doch oder besser nicht?

775

FXML & CSS 3

> Controller & Action Binding

Page 57: JavaFX - Jetzt nun doch oder besser nicht?

775

FXML & CSS 3

> Controller & Action Binding

<?xml version="1.0" encoding="UTF-8"?> <?import javafx.scene.layout.*?> ... <BorderPane fx:controller="Controller" xmlns:fx="http://javafx.com/fxml"> ... <Button fx:id="submitButton" text="%submit" onAction="#handleSubmitButtonAction"/> ... </BorderPane>

Page 58: JavaFX - Jetzt nun doch oder besser nicht?

775

FXML & CSS 3

> Scripting Language

Page 59: JavaFX - Jetzt nun doch oder besser nicht?

775

FXML & CSS 3

> Scripting Language

<?xml version="1.0" encoding="UTF-8"?> <?language javascript?> <?import javafx.scene.layout.*?> ... <BorderPane fx:controller="Controller" xmlns:fx="http://javafx.com/fxml">

<fx:script source="demo.js" /> ...

</BorderPane>

Page 60: JavaFX - Jetzt nun doch oder besser nicht?

775

FXML & CSS 3

> CSS 3

Page 61: JavaFX - Jetzt nun doch oder besser nicht?

775

Java

FxTooling

UI DesignHot `r Not

?

Page 62: JavaFX - Jetzt nun doch oder besser nicht?

775

JavaFxTooling

UI D

esig

n Hot `r Not

?

Page 63: JavaFX - Jetzt nun doch oder besser nicht?

775

> NetBeans 7.x > Eclipse> IntelliJ Idea

TOOLING

Page 64: JavaFX - Jetzt nun doch oder besser nicht?

775

> NetBeans 7.x > Eclipse> IntelliJ Idea

TOOLING

> JavaFX SceneBuilder

Page 65: JavaFX - Jetzt nun doch oder besser nicht?

775

SceneBuilder

Page 66: JavaFX - Jetzt nun doch oder besser nicht?

775

JavaFxTooling

UI D

esig

n Hot `r Not

?

Page 67: JavaFX - Jetzt nun doch oder besser nicht?

775

JavaFxTool

ing

UI DesignHot `r Not

?

Page 68: JavaFX - Jetzt nun doch oder besser nicht?
Page 69: JavaFX - Jetzt nun doch oder besser nicht?

JavaFx 2.0

Page 70: JavaFX - Jetzt nun doch oder besser nicht?

775

Page 71: JavaFX - Jetzt nun doch oder besser nicht?

775

> Improved UI Controls & Charts > Data Service Support> Enhancements to WebView > Modularization> Mulit-Touch & Sensor Support