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

Preview:

Citation preview

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

What is JavaFX? (I)

What is JavaFX? (II)

• Rich sets of graphics and media API

• Cross-Platform

• Deploy on the Desktop or in the browser

What can I build with JavaFX?

What can I build with JavaFX?

History

2007 2008 2009 2010

JavaOne•Announce JavaFX

JavaFX 1.0

JavaOne•End of JavaFX Script

2011 2012

JavaOne•JavaFX 2.0

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

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

Architecture

JavaFX Public API’s and Scene Graph

Quantum Toolkit

PrismGlass Windowing

ToolkitMedia Engine

Web EngineJava

2DOpen

GLD3D

Java Virtual Machine

Architecture

JavaFX Public API’s and Scene Graph

Quantum Toolkit

PrismGlass Windowing

ToolkitMedia Engine

Web EngineJava

2DOpen

GLD3D

Java Virtual Machine

Architecture

JavaFX Public API’s and Scene Graph

Quantum Toolkit

PrismGlass Windowing

ToolkitMedia Engine

Web EngineJava

2DOpen

GLD3D

Java Virtual Machine

Architecture

JavaFX Public API’s and Scene Graph

Quantum Toolkit

PrismGlass Windowing

ToolkitMedia Engine

Web EngineJava

2DOpen

GLD3D

Java Virtual Machine

Architecture

JavaFX Public API’s and Scene Graph

Quantum Toolkit

PrismGlass Windowing

ToolkitMedia Engine

Web EngineJava

2DOpen

GLD3D

Java Virtual Machine

Architecture

JavaFX Public API’s and Scene Graph

Quantum Toolkit

PrismGlass Windowing

ToolkitMedia Engine

Web EngineJava

2DOpen

GLD3D

Java Virtual Machine

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

Examples

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(); }}

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(); }}

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(); }}

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(); }}

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(); }}

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(); }}

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(); }

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(); }

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(); }

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(); }

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(); }

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(); }

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(); }

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(); }

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);}

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– …

FXML (II)

<FXML />

Controller.java

public class Controller {…}

FXApplication.java

public class FXApplicationextends Application {…}

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>

Examples – Forms v3.0 (II)

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>

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>

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>

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>

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" ); } }

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" ); } }

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" ); } }

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();}

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();}

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();}

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();

}

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();

}

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();

}

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();

}

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();

}

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();

}

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();

}

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();

}

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();

}

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();

}

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();

}

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();

}

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();

}

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();

}

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();

}

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();

}

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();

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();

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();

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();

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();

Deployment

Deployment - Standalone

• Ideal for offline applications

• Deploy Jar file

Deployment - Browser

• Embedded in a web page

• Can interact with the web page through JavaScript

• Deploy Jar file, JNLP and HTML

Deployment – Web Start

Network

Deployment – Web Start

• Published on internet

• Guarantees the latest version

• Simplify installation and upgrade

• Deploy Jar file, JNLP and HTML

Conclusions (I)

• Future for Java Desktop Applications

• Included in JSE 8

• One stop API

• Pure Java

Conclusions (II)

• Cross-Platform

• Deployment on Desktop and/or Web

• Development & Design

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/

Спасибо!

Benedicto Fernandez

benedicto.fernandez@cern.ch

Software Engineer

CERN / GS-AIS

Recommended