Download - JCD 2012 JavaFX 2

Transcript
Page 1: JCD 2012 JavaFX 2
Page 2: JCD 2012 JavaFX 2

美觀、快速與流暢的Java用戶端應用程式

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

Page 3: JCD 2012 JavaFX 2

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

JTable

JToolBar

JTextField

JToggleButton

JTextArea

JPasswordField

JMenuItem

JRadioButton

JMenu

JComboBox

JPopupMenu

JScrollBar

JProgressBar

BorderLayoutGridLayout

FlowLayout

GroutLayout

ScrollPaneLayout

CardLayout

Page 4: JCD 2012 JavaFX 2

Beautiful Smooth SimpleFast

Page 5: JCD 2012 JavaFX 2

Beautiful Smooth SimpleFast

Page 6: JCD 2012 JavaFX 2

Java Programming Language

JVM

Java SE

Card VM

Java Card

Java EE

Java ME VM

Java ME

JavaFX

Page 7: JCD 2012 JavaFX 2

• 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 8: JCD 2012 JavaFX 2

JavaFX Public APIs and Scene Graph

Quantum Toolkit

GlassWindowing

Toolkit

MediaEngine

WebEngine

Java 2D Open GL 3D

Prism

Page 9: JCD 2012 JavaFX 2

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

Page 10: JCD 2012 JavaFX 2
Page 11: JCD 2012 JavaFX 2
Page 12: JCD 2012 JavaFX 2
Page 13: JCD 2012 JavaFX 2
Page 14: JCD 2012 JavaFX 2
Page 15: JCD 2012 JavaFX 2
Page 16: JCD 2012 JavaFX 2
Page 17: JCD 2012 JavaFX 2
Page 18: JCD 2012 JavaFX 2
Page 19: JCD 2012 JavaFX 2
Page 20: JCD 2012 JavaFX 2
Page 21: JCD 2012 JavaFX 2
Page 22: JCD 2012 JavaFX 2
Page 23: JCD 2012 JavaFX 2
Page 24: JCD 2012 JavaFX 2

Animation

Page 25: JCD 2012 JavaFX 2
Page 26: JCD 2012 JavaFX 2
Page 27: JCD 2012 JavaFX 2
Page 28: JCD 2012 JavaFX 2

BelgiumAntwerp

Page 29: JCD 2012 JavaFX 2
Page 30: JCD 2012 JavaFX 2
Page 31: JCD 2012 JavaFX 2

FXML

Page 32: JCD 2012 JavaFX 2

javafx.stage.Stage

javafx.scene.Scene

Page 33: JCD 2012 JavaFX 2

root parent leaf

Page 34: JCD 2012 JavaFX 2

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 35: JCD 2012 JavaFX 2

• Region & Pane• AnchorPane• BorderPane• FlowPane & TilePane• GridPane• VBox & HBox• StackPane

Page 36: JCD 2012 JavaFX 2

BorderPane FlowPane GridPane TilePane StackPane

AnchorPane HBox VBox

Page 37: JCD 2012 JavaFX 2

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

Page 38: JCD 2012 JavaFX 2

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 39: JCD 2012 JavaFX 2

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 40: JCD 2012 JavaFX 2

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

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

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

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

EventHandlerhandle

Page 41: JCD 2012 JavaFX 2

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

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

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

final Ellipse oval = new Ellipse(100, 50);

Page 42: JCD 2012 JavaFX 2

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

Page 43: JCD 2012 JavaFX 2

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 44: JCD 2012 JavaFX 2

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 45: JCD 2012 JavaFX 2

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 46: JCD 2012 JavaFX 2
Page 47: JCD 2012 JavaFX 2
Page 48: JCD 2012 JavaFX 2

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

.label  {        ...        }

#welcome-­‐text  {        ...        }

#ac@ontarget  {        ...        }

.buAon  {        ...        }

.buAon:hover  {        ...        }

Login.css

Page 49: JCD 2012 JavaFX 2

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  {        ...        }.buAon  {        ...        }.buAon:hover  {        ...        }

Login.css

Page 50: JCD 2012 JavaFX 2

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

FXML

Page 51: JCD 2012 JavaFX 2

BorderPane border = new BorderPane();

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

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

Page 52: JCD 2012 JavaFX 2

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

FXML

Page 53: JCD 2012 JavaFX 2

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 54: JCD 2012 JavaFX 2

<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 55: JCD 2012 JavaFX 2

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

Page 56: JCD 2012 JavaFX 2

ListView

TableView

Label, TextField and TextArea

ImageView Button

Page 57: JCD 2012 JavaFX 2
Page 58: JCD 2012 JavaFX 2

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

• NetBeans❖http://netbeans.org/

Page 59: JCD 2012 JavaFX 2

59

Page 60: JCD 2012 JavaFX 2

Thanks甲骨文授權教育訓練中心

聯成電腦張益裕