benedicto fernandez [email protected] software engineer cern / gs-ais dubna 2012

76
Benedicto Fernandez benedicto.fernandez@cer n.ch Software Engineer CERN / GS-AIS Dubna 2012

Upload: joella-armstrong

Post on 27-Dec-2015

226 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Benedicto Fernandez

[email protected]

Software Engineer

CERN / GS-AIS

Dubna 2012

Page 2: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Contents• What is JavaFX?

• History

• What’s new in JavaFX 2.X?

• Architecture

• What’s coming next?

• Examples

• Deployment

Page 3: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

What is JavaFX? (I)

Page 4: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

What is JavaFX? (II)

• Rich sets of graphics and media API

• Cross-Platform

• Deploy on the Desktop or in the browser

Page 5: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

What can I build with JavaFX?

Page 6: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

What can I build with JavaFX?

Page 7: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

History

2007 2008 2009 2010

JavaOne•Announce JavaFX

JavaFX 1.0

JavaOne•End of JavaFX Script

2011 2012

JavaOne•JavaFX 2.0

Page 8: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

JavaFX Roadmap

2011 2012 2013 2014

JavaFX 2.0•Windows GA•Mac OS X Dev. Preview

JavaFX 2.0Scene Builder EA

JavaFX 2.0.2•JDK 7 co-install

NetBeans 7.1•JavaFX 2.0 Support

JavaFX 2.1•Mac OS X GA•Linux Dev. Preview

JavaFX 2.2•Linux GA

JavaFXScene Builder GA

JavaFX 3.0•Included in JDK 8•Concurrent OS support (Windows, Mac OS, Linux)

NetBeans•JavaFX 3.0 Support

Page 9: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

What’s new in JavaFX 2.0?

•New graphics and media engine

•FXML

•Web component

•Wide variety of built-in UI controls

•Refreshed browser plug-In

Page 10: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Architecture

JavaFX Public API’s and Scene Graph

Quantum Toolkit

PrismGlass Windowing

ToolkitMedia Engine

Web EngineJava

2DOpen

GLD3D

Java Virtual Machine

Page 11: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Architecture

JavaFX Public API’s and Scene Graph

Quantum Toolkit

PrismGlass Windowing

ToolkitMedia Engine

Web EngineJava

2DOpen

GLD3D

Java Virtual Machine

Page 12: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Architecture

JavaFX Public API’s and Scene Graph

Quantum Toolkit

PrismGlass Windowing

ToolkitMedia Engine

Web EngineJava

2DOpen

GLD3D

Java Virtual Machine

Page 13: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Architecture

JavaFX Public API’s and Scene Graph

Quantum Toolkit

PrismGlass Windowing

ToolkitMedia Engine

Web EngineJava

2DOpen

GLD3D

Java Virtual Machine

Page 14: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Architecture

JavaFX Public API’s and Scene Graph

Quantum Toolkit

PrismGlass Windowing

ToolkitMedia Engine

Web EngineJava

2DOpen

GLD3D

Java Virtual Machine

Page 15: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Architecture

JavaFX Public API’s and Scene Graph

Quantum Toolkit

PrismGlass Windowing

ToolkitMedia Engine

Web EngineJava

2DOpen

GLD3D

Java Virtual Machine

Page 16: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

What’s coming next?

• Tighter Integration with Java SE (JSE 8)

• Improvements to UI Controls and Charts

• Data Services Support

• Modularization

• Accessibility Support

• Multi-Touch and Gestures Support

• Sensor Support

Page 17: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Examples

Page 18: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Example – Hello Worldpublic class JavaFXApplication1 extends Application { /** * @param args the command line arguments */ public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) { // Set window's title primaryStage.setTitle("Hello World!"); // Create a button Button btn = new Button(); btn.setText("Say 'Hello World'"); btn.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { System.out.println("Hello World!"); } }); StackPane root = new StackPane(); root.getChildren().add(btn); primaryStage.setScene(new Scene(root, 300, 250)); primaryStage.show(); }}

Page 19: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Example – Hello Worldpublic class JavaFXApplication1 extends Application { /** * @param args the command line arguments */ public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) { // Set window's title primaryStage.setTitle("Hello World!"); // Create a button Button btn = new Button(); btn.setText("Say 'Hello World'"); btn.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { System.out.println("Hello World!"); } }); StackPane root = new StackPane(); root.getChildren().add(btn); primaryStage.setScene(new Scene(root, 300, 250)); primaryStage.show(); }}

Page 20: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Example – Hello Worldpublic class JavaFXApplication1 extends Application { /** * @param args the command line arguments */ public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) { // Set window's title primaryStage.setTitle("Hello World!"); // Create a button Button btn = new Button(); btn.setText("Say 'Hello World'"); btn.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { System.out.println("Hello World!"); } }); StackPane root = new StackPane(); root.getChildren().add(btn); primaryStage.setScene(new Scene(root, 300, 250)); primaryStage.show(); }}

Page 21: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Example – Hello Worldpublic class JavaFXApplication1 extends Application { /** * @param args the command line arguments */ public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) { // Set window's title primaryStage.setTitle("Hello World!"); // Create a button Button btn = new Button(); btn.setText("Say 'Hello World'"); btn.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { System.out.println("Hello World!"); } }); StackPane root = new StackPane(); root.getChildren().add(btn); primaryStage.setScene(new Scene(root, 300, 250)); primaryStage.show(); }}

Page 22: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Example – Hello Worldpublic class JavaFXApplication1 extends Application { /** * @param args the command line arguments */ public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) { // Set window's title primaryStage.setTitle("Hello World!"); // Create a button Button btn = new Button(); btn.setText("Say 'Hello World'"); btn.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { System.out.println("Hello World!"); } }); StackPane root = new StackPane(); root.getChildren().add(btn); primaryStage.setScene(new Scene(root, 300, 250)); primaryStage.show(); }}

Page 23: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Example – Hello Worldpublic class JavaFXApplication1 extends Application { /** * @param args the command line arguments */ public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) { // Set window's title primaryStage.setTitle("Hello World!"); // Create a button Button btn = new Button(); btn.setText("Say 'Hello World'"); btn.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { System.out.println("Hello World!"); } }); StackPane root = new StackPane(); root.getChildren().add(btn); primaryStage.setScene(new Scene(root, 300, 250)); primaryStage.show(); }}

Page 24: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Examples – Forms v1.0 public void start(Stage primaryStage) { // Set Window's Title primaryStage.setTitle("JavaFX Welcome!"); GridPane grid = new GridPane(); grid.setAlignment(Pos.CENTER); grid.setHgap(10); grid.setVgap(10); grid.setPadding(new Insets(25, 25, 25, 25)); Text scenetitle = new Text("Welcome"); scenetitle.setFont(Font.font("Tahoma", FontWeight.NORMAL, 20)); grid.add(scenetitle, 0, 0, 2, 1); Label userName = new Label( "User Name:“ ); grid.add(userName, 0, 1); TextField userTextField = new TextField(); grid.add(userTextField, 1, 1); Label pw = new Label("Password:"); grid.add(pw, 0, 2); PasswordField pwBox = new PasswordField(); grid.add(pwBox, 1, 2); Button btn = new Button( "Sign in“ ); HBox hbBtn = new HBox(10); hbBtn.setAlignment(Pos.BOTTOM_RIGHT); hbBtn.getChildren().add(btn); grid.add(hbBtn, 1, 4); final Text actiontarget = new Text(); grid.add(actiontarget, 1, 6); btn.setOnAction( new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent e) { actiontarget.setFill(Color.FIREBRICK); actiontarget.setId( "actiontarget“ ); actiontarget.setText( "Sign in button pressed“ ); } }); Scene scene = new Scene(grid, 300, 275); primaryStage.setScene(scene); primaryStage.show(); }

Page 25: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Examples – Forms v1.0 public void start(Stage primaryStage) { // Set Window's Title primaryStage.setTitle("JavaFX Welcome!"); GridPane grid = new GridPane(); grid.setAlignment(Pos.CENTER); grid.setHgap(10); grid.setVgap(10); grid.setPadding(new Insets(25, 25, 25, 25));

Text scenetitle = new Text("Welcome"); scenetitle.setFont(Font.font("Tahoma", FontWeight.NORMAL, 20)); grid.add(scenetitle, 0, 0, 2, 1); Label userName = new Label( "User Name:“ ); grid.add(userName, 0, 1); TextField userTextField = new TextField(); grid.add(userTextField, 1, 1); Label pw = new Label("Password:"); grid.add(pw, 0, 2); PasswordField pwBox = new PasswordField(); grid.add(pwBox, 1, 2); Button btn = new Button( "Sign in“ ); HBox hbBtn = new HBox(10); hbBtn.setAlignment(Pos.BOTTOM_RIGHT); hbBtn.getChildren().add(btn); grid.add(hbBtn, 1, 4); final Text actiontarget = new Text(); grid.add(actiontarget, 1, 6); btn.setOnAction( new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent e) { actiontarget.setFill(Color.FIREBRICK); actiontarget.setId( "actiontarget“ ); actiontarget.setText( "Sign in button pressed“ ); } }); Scene scene = new Scene(grid, 300, 275); primaryStage.setScene(scene); primaryStage.show(); }

Page 26: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Examples – Forms v1.0 public void start(Stage primaryStage) { // Set Window's Title primaryStage.setTitle("JavaFX Welcome!"); GridPane grid = new GridPane(); grid.setAlignment(Pos.CENTER); grid.setHgap(10); grid.setVgap(10); grid.setPadding(new Insets(25, 25, 25, 25)); Text scenetitle = new Text("Welcome"); scenetitle.setFont(Font.font("Tahoma", FontWeight.NORMAL, 20)); grid.add(scenetitle, 0, 0, 2, 1);

Label userName = new Label( "User Name:“ ); grid.add(userName, 0, 1); TextField userTextField = new TextField(); grid.add(userTextField, 1, 1); Label pw = new Label("Password:"); grid.add(pw, 0, 2); PasswordField pwBox = new PasswordField(); grid.add(pwBox, 1, 2); Button btn = new Button( "Sign in“ ); HBox hbBtn = new HBox(10); hbBtn.setAlignment(Pos.BOTTOM_RIGHT); hbBtn.getChildren().add(btn); grid.add(hbBtn, 1, 4); final Text actiontarget = new Text(); grid.add(actiontarget, 1, 6); btn.setOnAction( new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent e) { actiontarget.setFill(Color.FIREBRICK); actiontarget.setId( "actiontarget“ ); actiontarget.setText( "Sign in button pressed“ ); } }); Scene scene = new Scene(grid, 300, 275); primaryStage.setScene(scene); primaryStage.show(); }

Page 27: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Examples – Forms v1.0 public void start(Stage primaryStage) { // Set Window's Title primaryStage.setTitle("JavaFX Welcome!"); GridPane grid = new GridPane(); grid.setAlignment(Pos.CENTER); grid.setHgap(10); grid.setVgap(10); grid.setPadding(new Insets(25, 25, 25, 25)); Text scenetitle = new Text("Welcome"); scenetitle.setFont(Font.font("Tahoma", FontWeight.NORMAL, 20)); grid.add(scenetitle, 0, 0, 2, 1); Label userName = new Label( "User Name:“ ); grid.add(userName, 0, 1); TextField userTextField = new TextField(); grid.add(userTextField, 1, 1); Label pw = new Label("Password:"); grid.add(pw, 0, 2); PasswordField pwBox = new PasswordField(); grid.add(pwBox, 1, 2);

Button btn = new Button( "Sign in“ ); HBox hbBtn = new HBox(10); hbBtn.setAlignment(Pos.BOTTOM_RIGHT); hbBtn.getChildren().add(btn); grid.add(hbBtn, 1, 4); final Text actiontarget = new Text(); grid.add(actiontarget, 1, 6); btn.setOnAction( new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent e) { actiontarget.setFill(Color.FIREBRICK); actiontarget.setId( "actiontarget“ ); actiontarget.setText( "Sign in button pressed“ ); } }); Scene scene = new Scene(grid, 300, 275); primaryStage.setScene(scene); primaryStage.show(); }

Page 28: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Examples – Forms v1.0 public void start(Stage primaryStage) { // Set Window's Title primaryStage.setTitle("JavaFX Welcome!"); GridPane grid = new GridPane(); grid.setAlignment(Pos.CENTER); grid.setHgap(10); grid.setVgap(10); grid.setPadding(new Insets(25, 25, 25, 25)); Text scenetitle = new Text("Welcome"); scenetitle.setFont(Font.font("Tahoma", FontWeight.NORMAL, 20)); grid.add(scenetitle, 0, 0, 2, 1); Label userName = new Label( "User Name:“ ); grid.add(userName, 0, 1); TextField userTextField = new TextField(); grid.add(userTextField, 1, 1); Label pw = new Label("Password:"); grid.add(pw, 0, 2); PasswordField pwBox = new PasswordField(); grid.add(pwBox, 1, 2); Button btn = new Button( "Sign in“ ); HBox hbBtn = new HBox(10); hbBtn.setAlignment(Pos.BOTTOM_RIGHT); hbBtn.getChildren().add(btn); grid.add(hbBtn, 1, 4);

final Text actiontarget = new Text(); grid.add(actiontarget, 1, 6); btn.setOnAction( new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent e) { actiontarget.setFill(Color.FIREBRICK); actiontarget.setId( "actiontarget“ ); actiontarget.setText( "Sign in button pressed“ ); } }); Scene scene = new Scene(grid, 300, 275); primaryStage.setScene(scene); primaryStage.show(); }

Page 29: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Examples – Forms v1.0 public void start(Stage primaryStage) { // Set Window's Title primaryStage.setTitle("JavaFX Welcome!"); GridPane grid = new GridPane(); grid.setAlignment(Pos.CENTER); grid.setHgap(10); grid.setVgap(10); grid.setPadding(new Insets(25, 25, 25, 25)); Text scenetitle = new Text("Welcome"); scenetitle.setFont(Font.font("Tahoma", FontWeight.NORMAL, 20)); grid.add(scenetitle, 0, 0, 2, 1); Label userName = new Label( "User Name:“ ); grid.add(userName, 0, 1); TextField userTextField = new TextField(); grid.add(userTextField, 1, 1); Label pw = new Label("Password:"); grid.add(pw, 0, 2); PasswordField pwBox = new PasswordField(); grid.add(pwBox, 1, 2); Button btn = new Button( "Sign in“ ); HBox hbBtn = new HBox(10); hbBtn.setAlignment(Pos.BOTTOM_RIGHT); hbBtn.getChildren().add(btn); grid.add(hbBtn, 1, 4); final Text actiontarget = new Text(); grid.add(actiontarget, 1, 6); btn.setOnAction( new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent e) { actiontarget.setFill(Color.FIREBRICK); actiontarget.setId( "actiontarget“ ); actiontarget.setText( "Sign in button pressed“ ); } }); Scene scene = new Scene(grid, 300, 275); primaryStage.setScene(scene); primaryStage.show(); }

Page 30: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Examples – Forms v2.0b public void start(Stage primaryStage) { // Set Window's Title primaryStage.setTitle( "JavaFX Welcome!“ ); GridPane grid = new GridPane(); grid.setAlignment(Pos.CENTER); grid.setHgap(10); grid.setVgap(10); grid.setPadding( new Insets(25, 25, 25, 25)); Text scenetitle = new Text( "Welcome“ );

scenetitle.setFont(Font.font("Tahoma", FontWeight.NORMAL, 20)); grid.add(scenetitle, 0, 0, 2, 1); Label userName = new Label( "User Name:“ ); grid.add(userName, 0, 1); TextField userTextField = new TextField(); grid.add(userTextField, 1, 1); Label pw = new Label("Password:"); grid.add(pw, 0, 2); PasswordField pwBox = new PasswordField(); grid.add(pwBox, 1, 2); Button btn = new Button( "Sign in“ ); HBox hbBtn = new HBox(10); hbBtn.setAlignment(Pos.BOTTOM_RIGHT); hbBtn.getChildren().add(btn); grid.add(hbBtn, 1, 4); final Text actiontarget = new Text(); grid.add(actiontarget, 1, 6); btn.setOnAction( new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent e) {

actiontarget.setFill(Color.FIREBRICK); actiontarget.setId( "actiontarget“ ); actiontarget.setText( "Sign in button pressed“ ); } }); Scene scene = new Scene(grid, 300, 275); primaryStage.setScene(scene);

scene.getStylesheets().add(Login.class.getResource("Login.css").toExternalForm()); primaryStage.show(); }

Page 31: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Examples – Forms v2.0b public void start(Stage primaryStage) { // Set Window's Title primaryStage.setTitle( "JavaFX Welcome!“ ); GridPane grid = new GridPane(); grid.setAlignment(Pos.CENTER); grid.setHgap(10); grid.setVgap(10); grid.setPadding( new Insets(25, 25, 25, 25)); Text scenetitle = new Text( "Welcome“ );

scenetitle.setId( "welcome-text“ ); grid.add(scenetitle, 0, 0, 2, 1); Label userName = new Label( "User Name:“ ); grid.add(userName, 0, 1); TextField userTextField = new TextField(); grid.add(userTextField, 1, 1); Label pw = new Label("Password:"); grid.add(pw, 0, 2); PasswordField pwBox = new PasswordField(); grid.add(pwBox, 1, 2); Button btn = new Button( "Sign in“ ); HBox hbBtn = new HBox(10); hbBtn.setAlignment(Pos.BOTTOM_RIGHT); hbBtn.getChildren().add(btn); grid.add(hbBtn, 1, 4); final Text actiontarget = new Text();

actiontarget.setId( "welcome-text“ ); grid.add(actiontarget, 1, 6); btn.setOnAction( new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent e) { actiontarget.setId( "actiontarget“ ); actiontarget.setText( "Sign in button pressed“ ); } }); Scene scene = new Scene(grid, 300, 275); primaryStage.setScene(scene);

scene.getStylesheets().add( Login.class.getResource( "Login.css“ ).toExternalForm()); primaryStage.show(); }

Page 32: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Examples – Forms v2.0.root { -fx-background-image: url("background.jpg");}.label { -fx-font-size: 12px; -fx-font-weight: bold; -fx-text-fill: #333333; -fx-effect: dropshadow( gaussian , rgba(255,255,255,0.5) , 0,0,0,1 );}#welcome-text { -fx-font-size: 32px; -fx-font-family: "Arial Black"; -fx-fill: #818181; -fx-effect: innershadow( three-pass-box , rgba(0,0,0,0.7) , 6, 0.0 , 0 , 2 );}#actiontarget { -fx-fill: FIREBRICK; -fx-font-weight: bold; -fx-effect: dropshadow( gaussian , rgba(255,255,255,0.5) , 0,0,0,1 ); }.button { -fx-text-fill: white; -fx-font-family: "Arial Narrow"; -fx-font-weight: bold; -fx-background-color: linear-gradient(#61a2b1, #2A5058); -fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.6) , 5, 0.0 , 0 , 1 );}.button:hover { -fx-background-color: linear-gradient(#2A5058, #61a2b1);}

Page 33: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

FXML (I)

• Scriptable, XML-based markup language for defining user interfaces

• Alternative to developing UI programmatically• Easy and intuitive for web developers• Allows embedding any JVM scripting language

– JavaScript– Groovy– Clojure– …

Page 34: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

FXML (II)

<FXML />

Controller.java

public class Controller {…}

FXApplication.java

public class FXApplicationextends Application {…}

Page 35: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Examples – Forms v3.0 (I)<?xml version="1.0" encoding="UTF-8"?><?import javafx.geometry.*?>…

<GridPane fx:controller="loginfxml.Sample" stylesheets="loginfxml/Login.css" xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10"> <padding> <Insets top="25" right="25" bottom="10" left="25"/> </padding> <Text id="welcome-text" text="Welcome" GridPane.columnIndex="0" GridPane.rowIndex="0" GridPane.columnSpan="2"/> <Label text="User Name:" GridPane.columnIndex="0" GridPane.rowIndex="1"/> <TextField fx:id="usernameField" GridPane.columnIndex="1" GridPane.rowIndex="1"/> <Label text="Password:" GridPane.columnIndex="0" GridPane.rowIndex="2"/> <PasswordField fx:id="passwordField" GridPane.columnIndex="1"

GridPane.rowIndex="2"/> <HBox spacing="10" alignment="bottom_right" GridPane.columnIndex="1“

GridPane.rowIndex="4"> <Button text="Sign In" onAction="#handleSubmitButtonAction"/> </HBox> <Text fx:id="actiontarget" GridPane.columnIndex="1" GridPane.rowIndex="6"/></GridPane>

Page 36: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Examples – Forms v3.0 (II)

Page 37: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Examples – Forms v3.0 (III)<?xml version="1.0" encoding="UTF-8"?><?import javafx.geometry.*?>…

<GridPane fx:controller="loginfxml.Sample“ stylesheets="loginfxml/Login.css" xmlns:fx=http://javafx.com/fxml alignment="center" hgap="10" vgap="10"> <padding> <Insets top="25" right="25" bottom="10" left="25"/> </padding> <Text id="welcome-text" text="Welcome" GridPane.columnIndex="0" GridPane.rowIndex="0" GridPane.columnSpan="2"/> <Label text="User Name:" GridPane.columnIndex="0" GridPane.rowIndex="1"/> <TextField fx:id="usernameField" GridPane.columnIndex="1" GridPane.rowIndex="1"/> <Label text="Password:" GridPane.columnIndex="0" GridPane.rowIndex="2"/> <PasswordField fx:id="passwordField" GridPane.columnIndex="1" GridPane.rowIndex="2"/> <HBox spacing="10" alignment="bottom_right" GridPane.columnIndex="1“ GridPane.rowIndex="4"> <Button text="Sign In" onAction="#handleSubmitButtonAction"/> </HBox> <Text fx:id="actiontarget" GridPane.columnIndex="1" GridPane.rowIndex="6"/></GridPane>

Page 38: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Examples – Forms v3.0 (III)<?xml version="1.0" encoding="UTF-8"?><?import javafx.geometry.*?>…

<GridPane fx:controller="loginfxml.Sample“ stylesheets="loginfxml/Login.css" xmlns:fx=http://javafx.com/fxml alignment="center" hgap="10" vgap="10"> <padding> <Insets top="25" right="25" bottom="10" left="25"/> </padding> <Text id="welcome-text" text="Welcome" GridPane.columnIndex="0" GridPane.rowIndex="0" GridPane.columnSpan="2"/> <Label text="User Name:" GridPane.columnIndex="0" GridPane.rowIndex="1"/> <TextField fx:id="usernameField" GridPane.columnIndex="1" GridPane.rowIndex="1"/> <Label text="Password:" GridPane.columnIndex="0" GridPane.rowIndex="2"/> <PasswordField fx:id="passwordField" GridPane.columnIndex="1" GridPane.rowIndex="2"/> <HBox spacing="10" alignment="bottom_right" GridPane.columnIndex="1“ GridPane.rowIndex="4"> <Button text="Sign In" onAction="#handleSubmitButtonAction"/> </HBox> <Text fx:id="actiontarget" GridPane.columnIndex="1" GridPane.rowIndex="6"/></GridPane>

Page 39: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Examples – Forms v3.0 (III)<?xml version="1.0" encoding="UTF-8"?><?import javafx.geometry.*?>…

<GridPane fx:controller="loginfxml.Sample" stylesheets="loginfxml/Login.css" xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10"> <padding> <Insets top="25" right="25" bottom="10" left="25"/> </padding> <Text id="welcome-text" text="Welcome" GridPane.columnIndex="0" GridPane.rowIndex="0" GridPane.columnSpan="2"/> <Label text="User Name:" GridPane.columnIndex="0" GridPane.rowIndex="1"/> <TextField fx:id="usernameField" GridPane.columnIndex="1" GridPane.rowIndex="1"/> <Label text="Password:" GridPane.columnIndex="0" GridPane.rowIndex="2"/> <PasswordField fx:id="passwordField" GridPane.columnIndex="1" GridPane.rowIndex="2"/> <HBox spacing="10" alignment="bottom_right" GridPane.columnIndex="1“ GridPane.rowIndex="4">

<Button text="Sign In" onAction="#handleSubmitButtonAction"/>

</HBox> <Text fx:id="actiontarget" GridPane.columnIndex="1" GridPane.rowIndex="6"/></GridPane>

Page 40: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Examples – Forms v3.0 (III)<?xml version="1.0" encoding="UTF-8"?><?import javafx.geometry.*?>…

<GridPane fx:controller="loginfxml.Sample" stylesheets="loginfxml/Login.css" xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10"> <padding> <Insets top="25" right="25" bottom="10" left="25"/> </padding> <Text id="welcome-text" text="Welcome" GridPane.columnIndex="0" GridPane.rowIndex="0" GridPane.columnSpan="2"/> <Label text="User Name:" GridPane.columnIndex="0" GridPane.rowIndex="1"/>

<TextField fx:id="usernameField" GridPane.columnIndex="1" GridPane.rowIndex="1"/>

<Label text="Password:" GridPane.columnIndex="0" GridPane.rowIndex="2"/>

<PasswordField fx:id="passwordField" GridPane.columnIndex="1" GridPane.rowIndex="2"/>

<HBox spacing="10" alignment="bottom_right" GridPane.columnIndex="1“ GridPane.rowIndex="4"> <Button text="Sign In" onAction="#handleSubmitButtonAction"/> </HBox>

<Text fx:id="actiontarget" GridPane.columnIndex="1" GridPane.rowIndex="6"/>

</GridPane>

Page 41: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Examples – Forms v3.0 (IV)public class Sample { @FXML private TextField usernameField; @FXML private PasswordField passwordField; @FXML private Text actiontarget; @FXML protected void handleSubmitButtonAction( ActionEvent event ) { if ( passwordField.getText().equals( "Go" ) ) actiontarget.setText( "Signed in as " + usernameField.getText() + "!" ); else actiontarget.setText( "Username or Password not valid" ); } }

Page 42: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Examples – Forms v3.0 (IV)public class Sample { @FXML private TextField usernameField; @FXML private PasswordField passwordField; @FXML private Text actiontarget; @FXML protected void handleSubmitButtonAction( ActionEvent event ) { if ( passwordField.getText().equals( "Go" ) ) actiontarget.setText( "Signed in as " + usernameField.getText() + "!" ); else actiontarget.setText( "Username or Password not valid" ); } }

Page 43: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Examples – Forms v3.0 (IV)public class Sample { @FXML private TextField usernameField; @FXML private PasswordField passwordField; @FXML private Text actiontarget; @FXML protected void handleSubmitButtonAction( ActionEvent event ) { if ( passwordField.getText().equals( "Go" ) ) actiontarget.setText( "Signed in as " + usernameField.getText() + "!" ); else actiontarget.setText( "Username or Password not valid" ); } }

Page 44: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Examples – Forms v3.0 (V)@Overridepublic void start(Stage primaryStage) { Parent root = FXMLLoader.load( getClass().getResource( "Sample.fxml“ ) ); stage.setTitle( "FXML Welcome!" ); stage.setScene( new Scene( root ) ); stage.show();}

Page 45: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Examples – Forms v3.0 (V)@Overridepublic void start(Stage primaryStage) { Parent root = FXMLLoader.load( getClass().getResource( "Sample.fxml“ ) ); stage.setTitle( "FXML Welcome!" ); stage.setScene( new Scene( root ) ); stage.show();}

Page 46: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Examples – Forms v3.0 (V)@Overridepublic void start(Stage primaryStage) { Parent root = FXMLLoader.load( getClass().getResource( "Sample.fxml“ ) ); stage.setTitle( "FXML Welcome!" ); stage.setScene( new Scene( root ) ); stage.show();}

Page 47: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Examples - Images

@Override

public void start(Stage primaryStage) {

Image iJavaFx = new Image(

getClass().getResourceAsStream( "indice.jpg" ));

ImageView ivJavaFx = new ImageView();

ivJavaFx.setImage( iJavaFx );

root.getChildren().add( ivJavaFx );

primaryStage.setScene(new Scene(root, 600, 500));

primaryStage.show();

}

Page 48: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Examples - Images

@Override

public void start(Stage primaryStage) {

Image iJavaFx = new Image(

getClass().getResourceAsStream( "indice.jpg" ));

ImageView ivJavaFx = new ImageView();

ivJavaFx.setImage(iJavaFx);

root.getChildren().add( ivJavaFx );

primaryStage.setScene(new Scene(root, 600, 500));

primaryStage.show();

}

Page 49: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Examples - Images

@Override

public void start(Stage primaryStage) {

Image iJavaFx = new Image(

getClass().getResourceAsStream( "indice.jpg" ));

ImageView ivJavaFx = new ImageView();

ivJavaFx.setImage(iJavaFx);

root.getChildren().add( ivJavaFx );

primaryStage.setScene(new Scene(root, 600, 500));

primaryStage.show();

}

Page 50: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Examples - Images

@Override

public void start(Stage primaryStage) {

Image iJavaFx = new Image(

getClass().getResourceAsStream( "indice.jpg" ));

ImageView ivJavaFx = new ImageView();

root.getChildren().add( ivJavaFx );

primaryStage.setScene(new Scene(root, 600, 500));

primaryStage.show();

}

Page 51: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Examples - Media

@Override

public void start(Stage primaryStage) {

final String mediaUrl = "http://download.oracle.com/otndocs/products/javafx/oow2010-2.flv";

// create media player

Media media = new Media( mediaUrl );

MediaPlayer mediaPlayer = new MediaPlayer(media);

mediaPlayer.setAutoPlay( true );

// create mediaView and add media player to the viewer

MediaView mediaView = new MediaView( mediaPlayer );

root.getChildren().add( mediaView );

primaryStage.setScene(new Scene(root, 600, 500));

primaryStage.show();

}

Page 52: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Examples - Media

@Override

public void start(Stage primaryStage) {

final String mediaUrl = "http://download.oracle.com/otndocs/products/javafx/oow2010-2.flv";

// create media player

Media media = new Media( mediaUrl );

MediaPlayer mediaPlayer = new MediaPlayer(media);

mediaPlayer.setAutoPlay( true );

// create mediaView and add media player to the viewer

MediaView mediaView = new MediaView( mediaPlayer );

root.getChildren().add( mediaView );

primaryStage.setScene(new Scene(root, 600, 500));

primaryStage.show();

}

Page 53: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Examples - Media

@Override

public void start(Stage primaryStage) {

final String mediaUrl = "http://download.oracle.com/otndocs/products/javafx/oow2010-2.flv";

// create media player

Media media = new Media( mediaUrl );

MediaPlayer mediaPlayer = new MediaPlayer(media);

mediaPlayer.setAutoPlay( true );

// create mediaView and add media player to the viewer

MediaView mediaView = new MediaView( mediaPlayer );

root.getChildren().add( mediaView );

primaryStage.setScene(new Scene(root, 600, 500));

primaryStage.show();

}

Page 54: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Examples - Media

@Override

public void start(Stage primaryStage) {

final String mediaUrl = "http://download.oracle.com/otndocs/products/javafx/oow2010-2.flv";

// create media player

Media media = new Media( mediaUrl );

MediaPlayer mediaPlayer = new MediaPlayer(media);

mediaPlayer.setAutoPlay( true );

// create mediaView and add media player to the viewer

MediaView mediaView = new MediaView( mediaPlayer );

root.getChildren().add( mediaView );

primaryStage.setScene(new Scene(root, 600, 500));

primaryStage.show();

}

Page 55: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Examples - Media

@Override

public void start(Stage primaryStage) {

final String mediaUrl = "http://download.oracle.com/otndocs/products/javafx/oow2010-2.flv";

// create media player

Media media = new Media( mediaUrl );

MediaPlayer mediaPlayer = new MediaPlayer(media);

mediaPlayer.setAutoPlay( true );

// create mediaView and add media player to the viewer

MediaView mediaView = new MediaView( mediaPlayer );

root.getChildren().add( mediaView );

primaryStage.setScene(new Scene(root, 600, 500));

primaryStage.show();

}

Page 56: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Examples - Web

@Override

public void start(Stage primaryStage) {

WebView webView = new WebView();

webView.getEngine().load( "http://javafx.com" );

root.getChildren().add( webView );

primaryStage.setScene(new Scene(root, 600, 500));

primaryStage.show();

}

Page 57: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Examples - Web

@Override

public void start(Stage primaryStage) {

WebView webView = new WebView();

webView.getEngine().load( "http://javafx.com" );

root.getChildren().add( webView );

primaryStage.setScene(new Scene(root, 600, 500));

primaryStage.show();

}

Page 58: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Examples - Web

@Override

public void start(Stage primaryStage) {

WebView webView = new WebView();

webView.getEngine().load( "http://javafx.com" );

root.getChildren().add( webView );

primaryStage.setScene(new Scene(root, 600, 500));

primaryStage.show();

}

Page 59: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Examples - Web

@Override

public void start(Stage primaryStage) {

WebView webView = new WebView();

webView.getEngine().load( "http://javafx.com" );

root.getChildren().add( webView );

primaryStage.setScene(new Scene(root, 600, 500));

primaryStage.show();

}

Page 60: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Examples - Effects

@Override

public void start(Stage primaryStage) {

Image iJavaFx = new Image(

getClass().getResourceAsStream( "indice.jpg" ));

ImageView ivJavaFx = new ImageView();

root.getChildren().add( ivJavaFx );

Reflection r = new Reflection();

r.setFraction( 0.9 );

root.setEffect( r );

primaryStage.setScene(new Scene(root, 600, 500));

primaryStage.show();

}

Page 61: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Examples - Effects

@Override

public void start(Stage primaryStage) {

Image iJavaFx = new Image(

getClass().getResourceAsStream( "indice.jpg" ));

ImageView ivJavaFx = new ImageView();

root.getChildren().add( ivJavaFx );

Reflection r = new Reflection();

r.setFraction( 0.9 );

root.setEffect( r ); primaryStage.setScene(new Scene(root, 600, 500)); primaryStage.show();

}

Page 62: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Examples - Effects

@Override

public void start(Stage primaryStage) {

Image iJavaFx = new Image(

getClass().getResourceAsStream( "indice.jpg" ));

ImageView ivJavaFx = new ImageView();

root.getChildren().add( ivJavaFx );

Reflection r = new Reflection();

r.setFraction( 0.9 );

root.setEffect( r );

primaryStage.setScene(new Scene(root, 600, 500));

primaryStage.show();

}

Page 63: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Examples - Transitionsfinal Rectangle rectPath = new Rectangle (0, 0, 40, 40);

rectPath.setArcHeight(10);

rectPath.setArcWidth(10);

rectPath.setFill(Color.ORANGE);

...

Path path = new Path();

path.getElements().add(new MoveTo(20,20));

path.getElements().add(new CubicCurveTo(380, 0, 380, 120, 200, 120));

path.getElements().add(new CubicCurveTo(0, 120, 0, 240, 380, 240));

PathTransition pathTransition = new PathTransition();

pathTransition.setDuration(Duration.millis(4000));

pathTransition.setPath(path);

pathTransition.setNode(rectPath);

pathTransition.setOrientation(

PathTransition.OrientationType.ORTHOGONAL_TO_TANGENT);

pathTransition.setCycleCount(Timeline.INDEFINITE);

pathTransition.setAutoReverse(true);

pathTransition.play();

Page 64: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Examples - Transitionsfinal Rectangle rectPath = new Rectangle (0, 0, 40, 40);

rectPath.setArcHeight(10);

rectPath.setArcWidth(10);

rectPath.setFill(Color.ORANGE);

...

Path path = new Path();

path.getElements().add(new MoveTo(20,20));

path.getElements().add(new CubicCurveTo(380, 0, 380, 120, 200, 120));

path.getElements().add(new CubicCurveTo(0, 120, 0, 240, 380, 240));

PathTransition pathTransition = new PathTransition();

pathTransition.setDuration(Duration.millis(4000));

pathTransition.setPath(path);

pathTransition.setNode(rectPath);

pathTransition.setOrientation(

PathTransition.OrientationType.ORTHOGONAL_TO_TANGENT);

pathTransition.setCycleCount(Timeline.INDEFINITE);

pathTransition.setAutoReverse(true);

pathTransition.play();

Page 65: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Examples - Transitionsfinal Rectangle rectPath = new Rectangle (0, 0, 40, 40);

rectPath.setArcHeight(10);

rectPath.setArcWidth(10);

rectPath.setFill(Color.ORANGE);

...

Path path = new Path();

path.getElements().add(new MoveTo(20,20));

path.getElements().add(new CubicCurveTo(380, 0, 380, 120, 200, 120));

path.getElements().add(new CubicCurveTo(0, 120, 0, 240, 380, 240));

PathTransition pathTransition = new PathTransition();

pathTransition.setDuration(Duration.millis(4000));

pathTransition.setPath(path);

pathTransition.setNode(rectPath);

pathTransition.setOrientation(

PathTransition.OrientationType.ORTHOGONAL_TO_TANGENT);

pathTransition.setCycleCount(Timeline.INDEFINITE);

pathTransition.setAutoReverse(true);

pathTransition.play();

Page 66: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Examples - Transitionsfinal Rectangle rectPath = new Rectangle (0, 0, 40, 40);

rectPath.setArcHeight(10);

rectPath.setArcWidth(10);

rectPath.setFill(Color.ORANGE);

...

Path path = new Path();

path.getElements().add(new MoveTo(20,20));

path.getElements().add(new CubicCurveTo(380, 0, 380, 120, 200, 120));

path.getElements().add(new CubicCurveTo(0, 120, 0, 240, 380, 240));

PathTransition pathTransition = new PathTransition();

pathTransition.setDuration(Duration.millis(4000));

pathTransition.setPath(path);

pathTransition.setNode(rectPath);

pathTransition.setOrientation(

PathTransition.OrientationType.ORTHOGONAL_TO_TANGENT);

pathTransition.setCycleCount(Timeline.INDEFINITE);

pathTransition.setAutoReverse(true);

pathTransition.play();

Page 67: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Examples - Transitionsfinal Rectangle rectPath = new Rectangle (0, 0, 40, 40);

rectPath.setArcHeight(10);

rectPath.setArcWidth(10);

rectPath.setFill(Color.ORANGE);

...

Path path = new Path();

path.getElements().add(new MoveTo(20,20));

path.getElements().add(new CubicCurveTo(380, 0, 380, 120, 200, 120));

path.getElements().add(new CubicCurveTo(0, 120, 0, 240, 380, 240));

PathTransition pathTransition = new PathTransition();

pathTransition.setDuration(Duration.millis(4000));

pathTransition.setPath(path);

pathTransition.setNode(rectPath);

pathTransition.setOrientation(

PathTransition.OrientationType.ORTHOGONAL_TO_TANGENT);

pathTransition.setCycleCount(Timeline.INDEFINITE);

pathTransition.setAutoReverse(true);

pathTransition.play();

Page 68: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Deployment

Page 69: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Deployment - Standalone

• Ideal for offline applications

• Deploy Jar file

Page 70: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Deployment - Browser

• Embedded in a web page

• Can interact with the web page through JavaScript

• Deploy Jar file, JNLP and HTML

Page 71: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Deployment – Web Start

Network

Page 72: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Deployment – Web Start

• Published on internet

• Guarantees the latest version

• Simplify installation and upgrade

• Deploy Jar file, JNLP and HTML

Page 73: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Conclusions (I)

• Future for Java Desktop Applications

• Included in JSE 8

• One stop API

• Pure Java

Page 74: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Conclusions (II)

• Cross-Platform

• Deployment on Desktop and/or Web

• Development & Design

Page 75: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

And… now?

• Download JavaFX SDK and play!

• Official site http://javafx.com

• JavaFX Documentation http://docs.oracle.com/javafx/

• Blogs– https://blogs.oracle.com/javafx/– http://fxexperience.com– http://www.learnjavafx.typepad.com/weblog/

Page 76: Benedicto Fernandez benedicto.fernandez@cern.ch Software Engineer CERN / GS-AIS Dubna 2012

Спасибо!

Benedicto Fernandez

[email protected]

Software Engineer

CERN / GS-AIS