63
JavaFX 2! Make Java Sexy Again! 張益裕 甲骨文授權教育訓練中心 聯成電腦 講師

JDD 2013 JavaFX

  • Upload
    -

  • View
    193

  • Download
    1

Embed Size (px)

Citation preview

Page 1: JDD 2013 JavaFX

JavaFX  2!  Make  Java  Sexy  Again!張益裕甲骨文授權教育訓練中心  聯成電腦  講師

Page 2: JDD 2013 JavaFX

JTable

SwingAWT

Java2DJava3D

ActionListener

ItemListener

KeyListener

MouseListener

AdjustmentListener

WindowListener

TextListener

FocusListener

ComponentListener

JEditorPane

JOptionPane

JPanel

JRootPane

JScrollPane

JTextPane

JDialog

JFrame

JWindow

JToolbar

JSplitPane

JTabbedPane

JButton

JCheckBox

JColorChooser

JLabel

JList

JTree

JToolBar

JTextField

JToggleButton

JTextArea

JPasswordField

JMenuItem

JRadioButton

JMenu

JComboBox

JPopupMenu

JScrollBar

JProgressBar

BorderLayout

GridLayout

FlowLayout

GroutLayout

ScrollPaneLayout

CardLayout

Page 3: JDD 2013 JavaFX

Beautiful Smooth SimpleFast

Page 4: JDD 2013 JavaFX

Beautiful Smooth SimpleFast

Page 5: JDD 2013 JavaFX

Java Programming Language

JVM

Java SE

Card VM

Java Card

Java EE

Java ME VM

Java ME

JavaFX

Page 6: JDD 2013 JavaFX

•Java language features• FXML for defining user interfaces•New graphics pipeline for modern GPUs•Rich set of UI controls•Powerful Properties Model•Swing and AWT Interoperability

Page 7: JDD 2013 JavaFX

JavaFX Public APIs and Scene Graph

Quantum Toolkit

GlassWindowing

Toolkit

MediaEngine

WebEngine

Java 2D Open GL 3D

Prism

Page 8: JDD 2013 JavaFX

•Over 50+ components•CSS skinning and layout•Advanced UI controls

Page 9: JDD 2013 JavaFX
Page 10: JDD 2013 JavaFX
Page 11: JDD 2013 JavaFX
Page 12: JDD 2013 JavaFX
Page 13: JDD 2013 JavaFX
Page 14: JDD 2013 JavaFX
Page 15: JDD 2013 JavaFX
Page 16: JDD 2013 JavaFX
Page 17: JDD 2013 JavaFX
Page 18: JDD 2013 JavaFX
Page 19: JDD 2013 JavaFX
Page 20: JDD 2013 JavaFX

Designed by Jasper Potts http://www.jasperpotts.com/blog/

Page 21: JDD 2013 JavaFX

Animation

Page 22: JDD 2013 JavaFX
Page 23: JDD 2013 JavaFX
Page 24: JDD 2013 JavaFX

BelgiumAntwerpen

Page 25: JDD 2013 JavaFX
Page 26: JDD 2013 JavaFX
Page 27: JDD 2013 JavaFX

FXML

Page 28: JDD 2013 JavaFX

javafx.stage.Stage

javafx.scene.Scene

Page 29: JDD 2013 JavaFX

root parent leaf

Page 30: JDD 2013 JavaFX

public class HelloJavaFX extends Application {

@Override public void start(Stage stage) {

BorderPane root = new BorderPane(); Button btn = new Button("Hello JavaFX!"); root.setCenter(btn); Scene scene = new Scene(root, 300, 250); stage.setScene(scene); stage.show(); }

public static void main(String[] args) { launch(args); }}

javafx.application.Application

Place Button

Run...

Top level container

Root container

Page 31: JDD 2013 JavaFX

BorderPane FlowPane GridPane TilePane

StackPane AnchorPane HBox VBox

Page 32: JDD 2013 JavaFX
Page 33: JDD 2013 JavaFX

HBox

FlowPane

GridPane

VBox

StackPane

BorderPane

AnchorPane with HBox

+ =

Page 34: JDD 2013 JavaFX

•All new event structure and Handler•Working with convenience methods•Support Multi-Touch

Page 35: JDD 2013 JavaFX

Event.ANY

InputEvent.ANY

ActionEvent.ACTION

WindowEvent.ANY

KeyEvent.ANY

MouseEvent.ANY

...

KeyEvent.KEY_PRESSED

KeyEvent.KEY_RELEASED

KeyEvent.KEY_TYPED

MouseEvent.MOUSE_PRESSED

MouseEvent.MOUSE_RELEASED

...

WindowEvent.WINDOW_SHOWING

WindowEvent.WINDOW_SHOWN

...

Page 36: JDD 2013 JavaFX

Button btn = new Button("Hello JavaFX!");

btn.setOnAction(new EventHandler<ActionEvent>() {

@Override public void handle(ActionEvent event) { /* Do something */ }

});

Register Generic Event type

Generic Event type

listener?

Override

Page 37: JDD 2013 JavaFX
Page 38: JDD 2013 JavaFX

final Circle circle = new Circle(radius, Color.RED);

circle.setOnMouseEntered(new EventHandler<MouseEvent>() { public void handle(MouseEvent me) { ... }});

circle.setOnMouseExited(new EventHandler<MouseEvent>() { public void handle(MouseEvent me) { ... }});

circle.setOnMousePressed(new EventHandler<MouseEvent>() { public void handle(MouseEvent me) { ... }});

EventHandlerhandle

Page 39: JDD 2013 JavaFX

view.setOnScroll(new EventHandler<ScrollEvent>() {...});

view.setOnZoom(new EventHandler<ZoomEvent>() {...});

view.setOnRotate(new EventHandler<RotateEvent>() {...});

ImageView view = new ImageView(android_in_apple);

Page 40: JDD 2013 JavaFX

•JavaBean Component architecture•Expanded JavaBean properties•In conjunction with Binding

Page 41: JDD 2013 JavaFX

Label mile = new Label();

double kmValue = 32.5;double mileValue = kmValue * 0.621371192;String mileText = Double.toString(kmValue);

mile.setText(mileText);

KM to mile

Double to String

Set Label text

Page 42: JDD 2013 JavaFX

DoubleProperty kmPro = new SimpleDoubleProperty();

Label mile = new Label();

StringBinding mileBinding = kmPro.multiply(0.621371192).asString();

mile.textProperty().bind(mileBinding);

...

kmPro.set(32.5);

KM Property Object

StringBinding Object, hold KM to mile value

Bind mile value to Text Property

Change KM Property value

Page 43: JDD 2013 JavaFX

DoubleProperty kmPro = new SimpleDoubleProperty();Label mile = new Label();

StringBinding mileBinding = new StringBinding() { { super.bind(kmPro); }

@Override protected String computeValue() { return Double.toString(kmPro.get() * 0.621371192); }

};

mile.textProperty().bind(mileBinding);...kmPro.set(32.5);

Extends Binding Class

Binding Property

Override computeValue method

Produce value here

Page 44: JDD 2013 JavaFX
Page 45: JDD 2013 JavaFX
Page 46: JDD 2013 JavaFX

.root  {          -­‐fx-­‐background-­‐image:  url("background.jpg");}

.label  {        ...        }

#welcome-­‐text  {        ...        }

#acJontarget  {        ...        }

.buKon  {        ...        }

.buKon:hover  {        ...        }

Login.css

Page 47: JDD 2013 JavaFX

Scene scene = new Scene(grid, 300, 275);scene.getStylesheets().add("login/Login.css");

Text scenetitle = new Text("Welcome");scenetitle.setId("welcome-text");

Text actiontarget = new Text();actiontarget.setId("actiontarget");

.root  {          -­‐fx-­‐background-­‐image:  url("background.jpg");}.label  {        ...        }#welcome-­‐text  {        ...        }#ac,ontarget  {        ...        }.buKon  {        ...        }.buKon:hover  {        ...        }

Login.css

Page 48: JDD 2013 JavaFX

•XML-based language•Separate UI from your code•Support localize•Support any JVM language

FXML

Page 49: JDD 2013 JavaFX

BorderPane border = new BorderPane();

Label topPaneText = new Label("Label - TOP");border.setTop(topPaneText);

Button centerPaneButton = new Button("Button - CENTER");border.setCenter(centerPaneButton);

BorderPane

Label

Button

Page 50: JDD 2013 JavaFX

<BorderPane> <top> <Label text="Label - TOP"/> </top> <center> <Button text="Button - CENTER"/> </center></BorderPane>

FXML

Page 51: JDD 2013 JavaFX

Parent root = FXMLLoader.load(getClass().getResource("Sample.fxml")); Scene scene = new Scene(root);stage.setScene(scene);stage.show();

<BorderPane> <top> <Label text="Label - TOP"/> </top> <center> <Button text="Button - CENTER"/> </center></BorderPane>

Sample.fxml

Page 52: JDD 2013 JavaFX

<BorderPane fx:controller="SampleController" > <top> <Label text="Label - TOP" fx:id="label" /> </top> <center> <Button text="Button - CENTER" fx:id="button" onAction="#handleButtonAction"/> </center></BorderPane>

Sample.fxml

...public class SampleController implements Initializable { @FXML private Label label; @FXML private Button button; @FXML private void handleButtonAction(ActionEvent event) { button.setText("Button Pressed!"); label.setText("Button Pressed!"); } ...}

SampleController.java

Page 53: JDD 2013 JavaFX

•UI Layout Tool•FXML Visual Editor•Integrated Developer Workflow•Preview Your Work•CSS support

Page 54: JDD 2013 JavaFX

ListView

TableView

Label, TextField and TextArea

ImageView Button

Page 55: JDD 2013 JavaFX
Page 56: JDD 2013 JavaFX
Page 57: JDD 2013 JavaFX

.theme  {        master-­‐color:  grey;        -­‐fx-­‐background-­‐color:  derive(master-­‐color,  70%);        -­‐fx-­‐font-­‐size:  14px;}

.split-­‐pane  {        -­‐fx-­‐padding:  0;        -­‐fx-­‐border-­‐width:  0;        -­‐fx-­‐background-­‐color:  derive(master-­‐color,  100%);}...

SuperGrey.css.theme  {        master-­‐color:  #0049a6;        -­‐fx-­‐background-­‐color:  derive(master-­‐color,  70%);        -­‐fx-­‐font-­‐size:  14px;}

.split-­‐pane  {        -­‐fx-­‐padding:  0;        -­‐fx-­‐border-­‐width:  0;        -­‐fx-­‐background-­‐color:  derive(master-­‐color,  100%);}...

SuperNavy.css.theme  {        master-­‐color:  #99cc00;        -­‐fx-­‐background-­‐color:  derive(master-­‐color,  70%);        -­‐fx-­‐font-­‐size:  14px;}

.split-­‐pane  {        -­‐fx-­‐padding:  0;        -­‐fx-­‐border-­‐width:  0;        -­‐fx-­‐background-­‐color:  derive(master-­‐color,  100%);}...

SuperGreen.css

Page 58: JDD 2013 JavaFX
Page 59: JDD 2013 JavaFX

•JavaFX❖http://www.oracle.com/technetwork/java/javafx/•NetBeans❖http://netbeans.org/

Page 60: JDD 2013 JavaFX
Page 61: JDD 2013 JavaFX

•Make Java Sexy Again!•JavaFX架構•Hello JavaFX! Part 1•Hello JavaFX! Part 2•Hello JavaFX! Part 3•...

Page 62: JDD 2013 JavaFX

http://www.codedata.com.tw

Page 63: JDD 2013 JavaFX

Thanks張益裕

甲骨文授權教育訓練中心  聯成電腦