tehnici avansate de programareacf/java/slides/ro/javafx... · 2012. 3. 26. · ce este javafx?...

24
Tehnici avansate de programare Curs - Cristian Fr ˘ asinaru [email protected] Facultatea de Informatic ˘ a Universitatea ”Al. I. Cuza” Ias ¸i

Upload: others

Post on 04-Sep-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Tehnici avansate de programareacf/java/slides/ro/javafx... · 2012. 3. 26. · Ce este JavaFX? Platforma˘ de programare bazata pe Java˘ Creare de aplica¸tii RIA (Rich Internet

Tehnici avansate de programareCurs -

Cristian Frasinaru

[email protected]

Facultatea de Informatica

Universitatea ”Al. I. Cuza” Iasi

Page 2: Tehnici avansate de programareacf/java/slides/ro/javafx... · 2012. 3. 26. · Ce este JavaFX? Platforma˘ de programare bazata pe Java˘ Creare de aplica¸tii RIA (Rich Internet

JavaFX

Tehnici avansate de programare – p.1/23

Page 3: Tehnici avansate de programareacf/java/slides/ro/javafx... · 2012. 3. 26. · Ce este JavaFX? Platforma˘ de programare bazata pe Java˘ Creare de aplica¸tii RIA (Rich Internet

Cuprins

Ce este JavaFX

Arhitectura platformei

Graful scenei

Lucrul cu componente

Gestionarea pozitionarii

Tratarea evenimentelor

FXML

Tehnici avansate de programare – p.2/23

Page 4: Tehnici avansate de programareacf/java/slides/ro/javafx... · 2012. 3. 26. · Ce este JavaFX? Platforma˘ de programare bazata pe Java˘ Creare de aplica¸tii RIA (Rich Internet

Ce este JavaFX?

Platform a de programare bazata pe Java

Creare de aplicatii RIA (Rich Internet Application)

Portabilitate : desktop, browser, dispozitive mobile,TV, console jocuri, Blu-ray, etc.

Data-driven enterprise client applications

Competitori: Adobe AIR, Apache Pivot, OpenLaszlo,Microsoft Silverlight, etc.

Versiunea curenta: JavaFX 2.0 (oct, 2011)

Tehnici avansate de programare – p.3/23

Page 5: Tehnici avansate de programareacf/java/slides/ro/javafx... · 2012. 3. 26. · Ce este JavaFX? Platforma˘ de programare bazata pe Java˘ Creare de aplica¸tii RIA (Rich Internet

Arhitectura JavaFX

Tehnici avansate de programare – p.4/23

Page 6: Tehnici avansate de programareacf/java/slides/ro/javafx... · 2012. 3. 26. · Ce este JavaFX? Platforma˘ de programare bazata pe Java˘ Creare de aplica¸tii RIA (Rich Internet

Graful scenei (Scene)

Retained mode API

Arbore de componente (Node)

Nodurile pot fi interne (Parent) sau frunz a

Nodurile pot fi Shapes (2-D and 3-D), images, media, embedded web

browser, text, UI controls, charts, groups, and containers

Caracteristicile unui nod:proprietati: ID, style class, bounding volume, etc.efecte (blur, shadow), opacitate, transformarievent handlers (mouse, tastatura)stare specifica aplicatiei

Tehnici avansate de programare – p.5/23

Page 7: Tehnici avansate de programareacf/java/slides/ro/javafx... · 2012. 3. 26. · Ce este JavaFX? Platforma˘ de programare bazata pe Java˘ Creare de aplica¸tii RIA (Rich Internet

Root, Branch, Leaf Nodes

Tehnici avansate de programare – p.6/23

Page 8: Tehnici avansate de programareacf/java/slides/ro/javafx... · 2012. 3. 26. · Ce este JavaFX? Platforma˘ de programare bazata pe Java˘ Creare de aplica¸tii RIA (Rich Internet

Crearea unei aplicatii

import javafx.application.Application;import javafx.scene.Group;import javafx.scene.Scene;import javafx.scene.paint.Color;import javafx.stage.Stage;

public class Main extends Application {@Overridepublic void start(Stage stage) {

Group root = new Group();Scene scene = new Scene(root, 500, 500, Color.BLACK);stage.setTitle("Welcome to JavaFX!");stage.setScene(scene);stage.show();

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

launch(args);}

}

Tehnici avansate de programare – p.7/23

Page 9: Tehnici avansate de programareacf/java/slides/ro/javafx... · 2012. 3. 26. · Ce este JavaFX? Platforma˘ de programare bazata pe Java˘ Creare de aplica¸tii RIA (Rich Internet

Adaugarea nodurilor

// Cream un nod de tip GroupGroup group = new Group();root.getChildren().add(group);

// Cream un nod de tip RectangleRectangle r = new Rectangle(25,25,250,250);r.setFill(Color.BLUE);group.getChildren().add(r);

// Cream un nod de tip CircleCircle c = new Circle(150, Color.web("blue", 0.5f));c.setStrokeWidth(4f);group.getChildren().add(c);

Tehnici avansate de programare – p.8/23

Page 10: Tehnici avansate de programareacf/java/slides/ro/javafx... · 2012. 3. 26. · Ce este JavaFX? Platforma˘ de programare bazata pe Java˘ Creare de aplica¸tii RIA (Rich Internet

Crearea unei animatii

TranslateTransition translate =new TranslateTransition(Duration.millis(750));

translate.setToX(390); translate.setToY(390);

FillTransition fill = new FillTransition(Duration.millis(750));fill.setToValue(Color.RED);

RotateTransition rotate = new RotateTransition(Duration.millis(750));rotate.setToAngle(360);

ScaleTransition scale = new ScaleTransition(Duration.millis(750));scale.setToX(0.1); scale.setToY(0.1);

ParallelTransition transition = new ParallelTransition(r,translate, fill, rotate, scale);

transition.setCycleCount(Timeline.INDEFINITE);transition.setAutoReverse(true);transition.play();

Tehnici avansate de programare – p.9/23

Page 11: Tehnici avansate de programareacf/java/slides/ro/javafx... · 2012. 3. 26. · Ce este JavaFX? Platforma˘ de programare bazata pe Java˘ Creare de aplica¸tii RIA (Rich Internet

Conceptul depuls

Puls = eveniment care indica faptul ca graful sceneitrebuie sincronizat cu procesul de desenarepropriu-zisa (Prism)

Lansat la maximul 60 cadre pe secunda (fps)

Lansat atunci când exista animatii în derulare saueste detectata orice schimbare la nivelul GUI(schimbarea pozitiei unui buton, de exemplu)

Tratare asincron a a evenimentelor

Planificarea executiei unui puls se face prin timerenative ale SO via Glass Windowing Toolkit

Tehnici avansate de programare – p.10/23

Page 12: Tehnici avansate de programareacf/java/slides/ro/javafx... · 2012. 3. 26. · Ce este JavaFX? Platforma˘ de programare bazata pe Java˘ Creare de aplica¸tii RIA (Rich Internet

Lucrul cu componente

Superclasa Controljava.lang.Object

javafx.scene.Nodejavafx.scene.Parent

javafx.scene.control.Control

Crearea unui buton si tratarea evenimentului generatImage imageOk = new Image(getClass().getResourceAsStream("ok.png"));Button button = new Button("Accept", new ImageView(imageOk));

button.setOnAction(new EventHandler<ActionEvent>() {@Override public void handle(ActionEvent e) {

label.setText("Accepted");}

});

Tehnici avansate de programare – p.11/23

Page 13: Tehnici avansate de programareacf/java/slides/ro/javafx... · 2012. 3. 26. · Ce este JavaFX? Platforma˘ de programare bazata pe Java˘ Creare de aplica¸tii RIA (Rich Internet

Efecte si stiluri

Adaugarea unui efect de tip "umbra" butonuluiDropShadow shadow = new DropShadow();

//Adding the shadow when the mouse cursor is onbutton.addEventHandler(MouseEvent.MOUSE_ENTERED,

new EventHandler<MouseEvent>() {@Override public void handle(MouseEvent e) {

button.setEffect(shadow);}

});

Configurarea "stilului" butonului (CSS)button.setStyle("-fx-font: 22 arial; -fx-base: #b6e7c9;");

Tehnici avansate de programare – p.12/23

Page 14: Tehnici avansate de programareacf/java/slides/ro/javafx... · 2012. 3. 26. · Ce este JavaFX? Platforma˘ de programare bazata pe Java˘ Creare de aplica¸tii RIA (Rich Internet

Gestionarea pozitionarii

Superclasa Panejava.lang.Object

javafx.scene.Nodejavafx.scene.Parent

javafx.scene.layout.Regionjavafx.scene.layout.Pane

--> AnchorPane, BorderPane, FlowPane, GridPane,HBox, StackPane, TilePane, VBox

Crearea unui gestionar de tip BorderPaneBorderPane layout = new BorderPane();layout.setTop(new Rectangle(200, 50, Color.DARKCYAN));layout.setBottom(...));layout.setCenter(...);layout.setLeft(...);layout.setRight(...);

Tehnici avansate de programare – p.13/23

Page 15: Tehnici avansate de programareacf/java/slides/ro/javafx... · 2012. 3. 26. · Ce este JavaFX? Platforma˘ de programare bazata pe Java˘ Creare de aplica¸tii RIA (Rich Internet

Tratarea evenimentelor

Se face la nivel de arbore: EventDispatchChain

Target selection

Route construction

Event capturingEvent filters (addEventFilter)Event handlers (setOnT ipEveniment))

Event bubbling

Evenimentele pot fi consumate .

Tehnici avansate de programare – p.14/23

Page 16: Tehnici avansate de programareacf/java/slides/ro/javafx... · 2012. 3. 26. · Ce este JavaFX? Platforma˘ de programare bazata pe Java˘ Creare de aplica¸tii RIA (Rich Internet

Filtre de evenimente

Intercepting Filter Design Pattern// Register an event filter for a single nodenode.addEventFilter(MouseEvent.MOUSE_CLICKED,

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

});// Define an event filterEventHandler filter = new EventHandler(<InputEvent>() {

public void handle(InputEvent event) {System.out.println("Filtering:" + event.getEventType());event.consume();

}// Register the same filter for two different nodesmyNode1.addEventFilter(MouseEvent.MOUSE_PRESSED, filter);myNode2.addEventFilter(MouseEvent.MOUSE_PRESSED, filter);// Register the filter for another event typemyNode1.addEventFilter(KeyEvent.KEY_PRESSED, filter);

Tehnici avansate de programare – p.15/23

Page 17: Tehnici avansate de programareacf/java/slides/ro/javafx... · 2012. 3. 26. · Ce este JavaFX? Platforma˘ de programare bazata pe Java˘ Creare de aplica¸tii RIA (Rich Internet

Event Dispatch Chain

Tehnici avansate de programare – p.16/23

Page 18: Tehnici avansate de programareacf/java/slides/ro/javafx... · 2012. 3. 26. · Ce este JavaFX? Platforma˘ de programare bazata pe Java˘ Creare de aplica¸tii RIA (Rich Internet

Event Capturing vs. Bubbling

| |---------------| |-----------------| element1 | | || -----------| |----------- || |element2 \ / | || ------------------------- || Event CAPTURING |-----------------------------------

/ \---------------| |-----------------| element1 | | || -----------| |----------- || |element2 | | | || ------------------------- || Event BUBBLING |-----------------------------------

Tehnici avansate de programare – p.17/23

Page 19: Tehnici avansate de programareacf/java/slides/ro/javafx... · 2012. 3. 26. · Ce este JavaFX? Platforma˘ de programare bazata pe Java˘ Creare de aplica¸tii RIA (Rich Internet

FXML

FXML = limbaj de marcare bazat pe XML dedicatconstruirii de grafuri de opiecte (scene).

Tehnica declarativ a (versus programatica)

Din categoria: XUL, XAML, etc.

Arbore de componente ∼ arbore DOM XML

Separarea rolurilor

Independenta de limbaj (Java, Scala, Clojure, etc.)

Suport pentru internationalizare

Tehnici avansate de programare – p.18/23

Page 20: Tehnici avansate de programareacf/java/slides/ro/javafx... · 2012. 3. 26. · Ce este JavaFX? Platforma˘ de programare bazata pe Java˘ Creare de aplica¸tii RIA (Rich Internet

Programatic vs. Declarativ

ProgramaticBorderPane border = new BorderPane();Label top = new Label("Page Title");border.setTop(top);Label center = new Label ("Some data here");border.setCenter(center);

Declarativ<BorderPane>

<top><Label text="Page Title"/>

</top><center>

<Label text="Some data here"/></center>

</BorderPane>

Tehnici avansate de programare – p.19/23

Page 21: Tehnici avansate de programareacf/java/slides/ro/javafx... · 2012. 3. 26. · Ce este JavaFX? Platforma˘ de programare bazata pe Java˘ Creare de aplica¸tii RIA (Rich Internet

Exemplu

<AnchorPane fx:controller="demo.LoginController"id="Login" xmlns:fx="http://javafx.com/fxml">

<maxWidth><Double fx:value="-Infinity"/></maxWidth><maxHeight><Double fx:value="-Infinity"/></maxHeight><children>

<TextField layoutX="68.0" layoutY="58.0"prefWidth="126.0" fx:id="userId"onAction="#processLogin"/>

<PasswordField ... /><Label ..." /><Button ... onAction="#processLogin"/>...

</children><properties>

<backgroundColor><Color blue="1.0" green="1.0" red="1.0" />

</backgroundColor></properties>

</AnchorPane>

Tehnici avansate de programare – p.20/23

Page 22: Tehnici avansate de programareacf/java/slides/ro/javafx... · 2012. 3. 26. · Ce este JavaFX? Platforma˘ de programare bazata pe Java˘ Creare de aplica¸tii RIA (Rich Internet

FXML Loader

URL location = getClass().getResource("example.fxml");ResourceBundle resources = ResourceBundle.getBundle("messages");

FXMLLoader fxmlLoader = new FXMLLoader();fxmlLoader.setLocation(location);fxmlLoader.setResources(resources);fxmlLoader.setBuilderFactory(new JavaFXBuilderFactory());

InputStream inputStream = null;Pane root;try {

inputStream = location.openStream();root = (Pane)fxmlLoader.load(inputStream);

} finally {if (inputStream != null) {

inputStream.close();}

}

Tehnici avansate de programare – p.21/23

Page 23: Tehnici avansate de programareacf/java/slides/ro/javafx... · 2012. 3. 26. · Ce este JavaFX? Platforma˘ de programare bazata pe Java˘ Creare de aplica¸tii RIA (Rich Internet

Swing sau JavaFX?

Pro Swing

Maturitate

Biblioteci de componente, Framework-uri

Documentatie si resurse bogate

Pro JavaFX

Tehnologie moderna, nu doar pentru desktop (RIA)

Orientata spre "spectaculos"

Suport pentru animatii, grafica 2D, 3D

Tehnici avansate de programare – p.22/23

Page 24: Tehnici avansate de programareacf/java/slides/ro/javafx... · 2012. 3. 26. · Ce este JavaFX? Platforma˘ de programare bazata pe Java˘ Creare de aplica¸tii RIA (Rich Internet

Documentatie

Creating a JavaFX GUI Tutoriale JavaFXhttp://docs.oracle.com/javafx/index.html

JavaFX APIhttp://docs.oracle.com/javafx/2.0/api/index.html

Tehnici avansate de programare – p.23/23