32
Dan Vulpe Software Engineer Centric @dvulpe [email protected] Developing RIA with Java 2

Dan Vulpe - JavaFX 2 - Developing RIA with Java

Embed Size (px)

Citation preview

Page 1: Dan Vulpe - JavaFX 2 - Developing RIA with Java

Dan VulpeSoftware EngineerCentric

@[email protected]

Developing RIA with Java

2

Page 2: Dan Vulpe - JavaFX 2 - Developing RIA with Java

History

Dec 2008JavaFX 1.0

Apr 2010JavaFX 1.3

Oct 2011JavaFX

2.0Java API

Windows

Apr 2012JavaFX

2.1LCD text

UI elementsVideo h264

Mac

Aug 2012JavaFX

2.2Canvas

UI elementsTouch events

Linux

Page 3: Dan Vulpe - JavaFX 2 - Developing RIA with Java

Scene graph design

Parent

Parent ParentParent

Leaf LeafLeafLeaf Leaf

Scene

Page 4: Dan Vulpe - JavaFX 2 - Developing RIA with Java

Scene graph design

Parent

Parent ParentParent

Leaf LeafLeafLeaf Leaf

Scene

Page 5: Dan Vulpe - JavaFX 2 - Developing RIA with Java

Nodes have Properties

• parent

• scene

• translate (X, Y, Z)

• scale (X, Y, Z)

• opacity

• ... see JavaDoc for javafx.scene.Node

Page 6: Dan Vulpe - JavaFX 2 - Developing RIA with Java

Observable Properties

service.valueProperty().addListener(new ChangeListener<WorkItemUI>() {

@Overridepublic void changed(ObservableValue<? extends WorkItemUI> value,

WorkItemUI oldValue, WorkItemUI newValue) {

itemsPane.getChildren().add(newValue); }});

Page 7: Dan Vulpe - JavaFX 2 - Developing RIA with Java

Binding

public void bindTo(WorkItemModel workItem) { title.bindBidirectional(workItem.title); issueType.bind(workItem.issueType); workItemInfo.bindBidirectional(workItem.workItemInfo); asignee.bindBidirectional(workItem.asignee); dueDate.bindBidirectional(workItem.dueDate); priority.bindBidirectional(workItem.priority); }

Page 8: Dan Vulpe - JavaFX 2 - Developing RIA with Java

Hello JavaFX

Page 9: Dan Vulpe - JavaFX 2 - Developing RIA with Java

Layouts

Page 10: Dan Vulpe - JavaFX 2 - Developing RIA with Java

<VBox alignment="CENTER" prefHeight="250.0" prefWidth="450.0" spacing="5.0" xmlns:fx="http://javafx.com/fxml"> <children> <Label text="Enter your credentials" textFill="WHITE"/> <GridPane fx:id="formContainer" hgap="10.0" vgap="10.0"> <children> <Label text="Username" GridPane.columnIndex="0" GridPane.rowIndex="0"/> <Label text="Password" GridPane.columnIndex="0" GridPane.rowIndex="1" /> <TextField GridPane.columnIndex="1" GridPane.rowIndex="0" /> <TextField GridPane.columnIndex="1" GridPane.rowIndex="1" /> <Button text="Log In" GridPane.columnIndex="1" GridPane.rowIndex="2" /> </children> </GridPane> </children></VBox>

FXML

Page 11: Dan Vulpe - JavaFX 2 - Developing RIA with Java

Scene Builder - Oracle

Page 12: Dan Vulpe - JavaFX 2 - Developing RIA with Java

GUI Editor: Preview

Page 13: Dan Vulpe - JavaFX 2 - Developing RIA with Java

CSS Styling.root { -fx-font-size: 15px; -fx-base: #eee; -fx-font-family: "Trebuchet MS";}

.workItem { -fx-border-radius: 5; -fx-background-radius: 5; -fx-effect: dropshadow(gaussian, #ccc, 10, 0.1, 5, 2); -fx-border-color: #666; -fx-border-weight: 1px; -fx-font-size: 1em; -fx-opacity: 0.9; -fx-base: #333;}

Page 14: Dan Vulpe - JavaFX 2 - Developing RIA with Java

Bindingspublic class DemoController { @FXML private TextField textField; @FXML private Label label; @FXML private ListView<String> listView; @FXML private Pane rootPane; @FXML private Pane formPane; @FXML private Button aButton;

public void setDataModel(DataModel dataModel) { label.textProperty().bind(dataModel.titleProperty()); textField.textProperty().bindBidirectional(dataModel.textProperty());

Bindings.bindContent(dataModel.aPlainList(), listView.getItems());

aButton.disableProperty().bind(textField.textProperty().isEqualTo("")); formPane.prefWidthProperty().bind(rootPane.widthProperty().divide(2)); }}

Page 15: Dan Vulpe - JavaFX 2 - Developing RIA with Java

Application Structure

FXML(layout)

FX CSS(styling)

Java Controller

Rendered OnJavaFX Scene

JavaFXStage

Rendered On

Page 16: Dan Vulpe - JavaFX 2 - Developing RIA with Java

Best Practices?

Page 17: Dan Vulpe - JavaFX 2 - Developing RIA with Java

GUI components

ExternalServicesClient

Application State

Presenter View

Model

Updates Binds To

Sends Actions To

Core UI

BusinessLogic

Page 18: Dan Vulpe - JavaFX 2 - Developing RIA with Java

JavaFX approach

ExternalServicesClient

BusinessLogic

Application State

Presenter View

Model

Updates Binds To

Sends Actions To

Core UI

Page 19: Dan Vulpe - JavaFX 2 - Developing RIA with Java

JavaFX approach

ExternalServicesClient

BusinessLogic

Application State

Presenter View

Model

Updates Binds To

Sends Actions To

Core UIAsync

Services

Page 20: Dan Vulpe - JavaFX 2 - Developing RIA with Java

JavaFX approach

ExternalServicesClient

BusinessLogic

Application State

Presenter View

Model

Updates Binds To

Sends Actions To

Core UIAsync

Services

Page 21: Dan Vulpe - JavaFX 2 - Developing RIA with Java

JavaFX approach

ExternalServicesClient

BusinessLogic

Application State

Presenter View

Model

Updates Binds To

Sends Actions To

Core UI

Use Case 1

AsyncServices

Page 22: Dan Vulpe - JavaFX 2 - Developing RIA with Java

JavaFX approach

ExternalServicesClient

BusinessLogic

Application State

Presenter View

Model

Updates Binds To

Sends Actions To

Core UI

Use Case 1

Use Case 2

AsyncServices

Page 23: Dan Vulpe - JavaFX 2 - Developing RIA with Java

JavaFX approach

ExternalServicesClient

BusinessLogic

Application State

Presenter View

Model

Updates Binds To

Sends Actions To

Core UI

Use Case 1

Use Case 2

Use Case 3

AsyncServices

Page 24: Dan Vulpe - JavaFX 2 - Developing RIA with Java

JavaFX approach

ExternalServicesClient

BusinessLogic

Application State

Presenter View

Model

Updates Binds To

Sends Actions To

Core UI

Use Case 1

Use Case 2

Use Case N

Use Case 3

AsyncServices

Page 25: Dan Vulpe - JavaFX 2 - Developing RIA with Java

DEMO

Page 26: Dan Vulpe - JavaFX 2 - Developing RIA with Java

JavaFX App Structure

FXML(layout)

FX CSS(styling)

Java Controller

Rendered OnJavaFX Scene

JavaFXStage

Rendered On

Page 27: Dan Vulpe - JavaFX 2 - Developing RIA with Java

Swing Integration

FXML(layout)

FX CSS(styling)

Java Controller

Rendered OnJavaFX Scene JFXPanel

Rendered On

swing Component

Page 28: Dan Vulpe - JavaFX 2 - Developing RIA with Java

Deploy

• applets

• Java WebStart

• standalone applications (natively packaged Windows, Mac)

• ... using JavaFX SDK tools (ant tasks)

Page 29: Dan Vulpe - JavaFX 2 - Developing RIA with Java

Why JavaFX?

• available on the JVM (Java, JRuby, Scala, Groovy, Clojure)

• portability (Mac, Linux, Windows)

• scene-graph

• rapid development

Page 30: Dan Vulpe - JavaFX 2 - Developing RIA with Java

Resources

• http://fxexperience.com

• http://github.com/dvulpe/codecamp-javafx

Page 31: Dan Vulpe - JavaFX 2 - Developing RIA with Java

?

Page 32: Dan Vulpe - JavaFX 2 - Developing RIA with Java

Thank you!Please fill in the feedback form!