KEMBAR78
JavaFX programming | PDF
JavaFX programming

Tecniche di Programmazione – A.A. 2012/2013
Summary
1.   Model-View-Controller
2.   The Controller in FXML
3.   Charts




 2                        Tecniche di programmazione   A.A. 2012/2013
Model-View-Controller

        JavaFX programming
Application complexity and MVC
       Interactive, graphical applications exhibit complex
        interaction patterns
       Flow of control is in the hand of the user
       Actions are mainly asynchronous

       How to organize the program?
       Where to store data?
       How to decouple application logic from interface details?
       How to keep in sync the inner data with the visibile
        interface?

    4                             Tecniche di programmazione   A.A. 2012/2013
Media Player example




5                Tecniche di programmazione   A.A. 2012/2013
MVC pattern defined




6                Tecniche di programmazione   A.A. 2012/2013
Normal life-cycle of interaction




7                  Tecniche di programmazione   A.A. 2012/2013
Mapping concepts to JavaFX
       View: presenting the UI
           FXML
           The Nodes in the Scene Graph
       Controller: reacting to user actions
           Set of event handlers
       Model: handling the data
           Class(es) including data
           Persistent data in Data Bases




    8                                 Tecniche di programmazione   A.A. 2012/2013
Design Exercise
       Imagine an application managing a list of items (e.g.,
        names)
       Different items in the user interface should manage the
        same set of data, with different criteria and actions

       Where do you declare the data class?
       Which class should have access to which?
       Who creates what objects?




    9                            Tecniche di programmazione   A.A. 2012/2013
A possible
solution




10           Tecniche di programmazione   A.A. 2012/2013
The Controller in FXML

         JavaFX programming
The Controller in FXML
    Several attributes in FXML help in the definition of the
     Controller behavior associated to a scene
        Identification of the Controller class
        Injection of Node identifiers (references)
        Registration of event handlers
    Additionally, the JavaFX Scene Builder may generate a
     «controller skeleton» for inclusion in the project




    12                              Tecniche di programmazione   A.A. 2012/2013
Defining the Controller class
    The Root element of the scene
     graph may specify a fx:
     controller attribute
        <BorderPane
         id="BorderPane"
         xmlns:fx="http://javafx.com
         /fxml"
         fx:controller="it.polito.te
         cnprogr.RuzzleController">




    13                      Tecniche di programmazione   A.A. 2012/2013
fx:controller attribute
    Associate a "controller" class with an FXML document
        Automatically create the instance when FXML is loaded
    Should include event handler methods
    May include an initialize() method
        public void initialize();
        called once when the contents of its associated document have
         been completely loaded
        any necessary post-processing on the content




    14                            Tecniche di programmazione   A.A. 2012/2013
Accessing the controller instance
    The Application often needs to communicate with the
     controller object
        E.g., to call setModel()
    FXMLLoader provides this information

         URL location = getClass().getResource("example.fxml");

         FXMLLoader fxmlLoader = new FXMLLoader(location);

         Pane root = (Pane)fxmlLoader.load();

         MyController controller =
         (MyController)fxmlLoader.getController();



    15                              Tecniche di programmazione   A.A. 2012/2013
Injection of Node references
    The controller code may directly access various Nodes in
     the associated scene graph
    The attribute @FXML associates a Node variable with
     the corresponding node, with the same fx:id value as the
     variable name
        No more error-prone «lookup» calls...
        Local variables in the controller instance
    Try:View | Show Sample Controller Skeleton on the
     Scene Builder!
                   @FXML // fx:id="theTitle"
                      private Label theTitle;

    16                              Tecniche di programmazione   A.A. 2012/2013
Registration of Event Handlers
     In FXML, you may set a event handler
      through attributes
         onAction, onKeyTyped, onMouseClicked,
          ... hundreds more ...
     The value should be the #name of a
      method in the controller class
         With the right signature for the event
          type

<Button fx:id="cercaBtn"                       @FXML
onAction="#doCercaParola"                      void doCercaParola (
text="Cerca" />                                ActionEvent event ) {
     17                             Tecniche di programmazione   A.A. 2012/2013
Resources

JavaFX programming
Resources
    API
        http://docs.oracle.com/javafx/2/api/index.html
    FXML Controller
        http://docs.oracle.com/javafx/2/api/javafx/fxml/doc-
         files/introduction_to_fxml.html#controllers
    Books
        Head First Design Patterns, chapter 12




    21                              Tecniche di programmazione   A.A. 2012/2013
Licenza d’uso
    Queste diapositive sono distribuite con licenza Creative Commons
     “Attribuzione - Non commerciale - Condividi allo stesso modo (CC
     BY-NC-SA)”
    Sei libero:
        di riprodurre, distribuire, comunicare al pubblico, esporre in pubblico,
         rappresentare, eseguire e recitare quest'opera
        di modificare quest'opera
    Alle seguenti condizioni:
        Attribuzione — Devi attribuire la paternità dell'opera agli autori
         originali e in modo tale da non suggerire che essi avallino te o il modo in
         cui tu usi l'opera.
        Non commerciale — Non puoi usare quest'opera per fini
         commerciali.
        Condividi allo stesso modo — Se alteri o trasformi quest'opera, o se
         la usi per crearne un'altra, puoi distribuire l'opera risultante solo con una
         licenza identica o equivalente a questa.
    http://creativecommons.org/licenses/by-nc-sa/3.0/
    22                                   Tecniche di programmazione   A.A. 2012/2013

JavaFX programming

  • 1.
    JavaFX programming Tecniche diProgrammazione – A.A. 2012/2013
  • 2.
    Summary 1. Model-View-Controller 2. The Controller in FXML 3. Charts 2 Tecniche di programmazione A.A. 2012/2013
  • 3.
    Model-View-Controller JavaFX programming
  • 4.
    Application complexity andMVC  Interactive, graphical applications exhibit complex interaction patterns  Flow of control is in the hand of the user  Actions are mainly asynchronous  How to organize the program?  Where to store data?  How to decouple application logic from interface details?  How to keep in sync the inner data with the visibile interface? 4 Tecniche di programmazione A.A. 2012/2013
  • 5.
    Media Player example 5 Tecniche di programmazione A.A. 2012/2013
  • 6.
    MVC pattern defined 6 Tecniche di programmazione A.A. 2012/2013
  • 7.
    Normal life-cycle ofinteraction 7 Tecniche di programmazione A.A. 2012/2013
  • 8.
    Mapping concepts toJavaFX  View: presenting the UI  FXML  The Nodes in the Scene Graph  Controller: reacting to user actions  Set of event handlers  Model: handling the data  Class(es) including data  Persistent data in Data Bases 8 Tecniche di programmazione A.A. 2012/2013
  • 9.
    Design Exercise  Imagine an application managing a list of items (e.g., names)  Different items in the user interface should manage the same set of data, with different criteria and actions  Where do you declare the data class?  Which class should have access to which?  Who creates what objects? 9 Tecniche di programmazione A.A. 2012/2013
  • 10.
    A possible solution 10 Tecniche di programmazione A.A. 2012/2013
  • 11.
    The Controller inFXML JavaFX programming
  • 12.
    The Controller inFXML  Several attributes in FXML help in the definition of the Controller behavior associated to a scene  Identification of the Controller class  Injection of Node identifiers (references)  Registration of event handlers  Additionally, the JavaFX Scene Builder may generate a «controller skeleton» for inclusion in the project 12 Tecniche di programmazione A.A. 2012/2013
  • 13.
    Defining the Controllerclass  The Root element of the scene graph may specify a fx: controller attribute  <BorderPane id="BorderPane" xmlns:fx="http://javafx.com /fxml" fx:controller="it.polito.te cnprogr.RuzzleController"> 13 Tecniche di programmazione A.A. 2012/2013
  • 14.
    fx:controller attribute  Associate a "controller" class with an FXML document  Automatically create the instance when FXML is loaded  Should include event handler methods  May include an initialize() method  public void initialize();  called once when the contents of its associated document have been completely loaded  any necessary post-processing on the content 14 Tecniche di programmazione A.A. 2012/2013
  • 15.
    Accessing the controllerinstance  The Application often needs to communicate with the controller object  E.g., to call setModel()  FXMLLoader provides this information URL location = getClass().getResource("example.fxml"); FXMLLoader fxmlLoader = new FXMLLoader(location); Pane root = (Pane)fxmlLoader.load(); MyController controller = (MyController)fxmlLoader.getController(); 15 Tecniche di programmazione A.A. 2012/2013
  • 16.
    Injection of Nodereferences  The controller code may directly access various Nodes in the associated scene graph  The attribute @FXML associates a Node variable with the corresponding node, with the same fx:id value as the variable name  No more error-prone «lookup» calls...  Local variables in the controller instance  Try:View | Show Sample Controller Skeleton on the Scene Builder! @FXML // fx:id="theTitle" private Label theTitle; 16 Tecniche di programmazione A.A. 2012/2013
  • 17.
    Registration of EventHandlers  In FXML, you may set a event handler through attributes  onAction, onKeyTyped, onMouseClicked, ... hundreds more ...  The value should be the #name of a method in the controller class  With the right signature for the event type <Button fx:id="cercaBtn" @FXML onAction="#doCercaParola" void doCercaParola ( text="Cerca" /> ActionEvent event ) { 17 Tecniche di programmazione A.A. 2012/2013
  • 18.
  • 19.
    Resources  API  http://docs.oracle.com/javafx/2/api/index.html  FXML Controller  http://docs.oracle.com/javafx/2/api/javafx/fxml/doc- files/introduction_to_fxml.html#controllers  Books  Head First Design Patterns, chapter 12 21 Tecniche di programmazione A.A. 2012/2013
  • 20.
    Licenza d’uso  Queste diapositive sono distribuite con licenza Creative Commons “Attribuzione - Non commerciale - Condividi allo stesso modo (CC BY-NC-SA)”  Sei libero:  di riprodurre, distribuire, comunicare al pubblico, esporre in pubblico, rappresentare, eseguire e recitare quest'opera  di modificare quest'opera  Alle seguenti condizioni:  Attribuzione — Devi attribuire la paternità dell'opera agli autori originali e in modo tale da non suggerire che essi avallino te o il modo in cui tu usi l'opera.  Non commerciale — Non puoi usare quest'opera per fini commerciali.  Condividi allo stesso modo — Se alteri o trasformi quest'opera, o se la usi per crearne un'altra, puoi distribuire l'opera risultante solo con una licenza identica o equivalente a questa.  http://creativecommons.org/licenses/by-nc-sa/3.0/ 22 Tecniche di programmazione A.A. 2012/2013