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/
Top Related