SlideShare a Scribd company logo
JavaFX for Business Application Developers
                          Michael Heinrichs

Montag, 8. Oktober 2012
“Coo
                               k
                          kodo ing Eggs”
                              mut (      b
                                    CC B y
                                        Y 2.0
                                                )




                                            “charles bridge” by
                                            hodgers (CC BY-SA 2.0)
Montag, 8. Oktober 2012
The following is intended to outline our general product
                            direction. It is intended for information purposes only, and may
                          not be incorporated into any contract. It is not a commitment to
                             deliver any material, code, or functionality, and should not be
                             relied upon in making purchasing decisions. The development,
                           release, and timing of any features or functionality described for
                              Oracle’s products remains at the sole discretion of Oracle.




Montag, 8. Oktober 2012
• Sample Application
                          • Process Overview

                          • Defining the View
                          • Data Binding

                          • Styling with CSS

Montag, 8. Oktober 2012
Sample Application



Montag, 8. Oktober 2012
JACP



Montag, 8. Oktober 2012
Just A
                          J Another C
                                    Conference P
                                               Planner



Montag, 8. Oktober 2012
Montag, 8. Oktober 2012
Java EE
                                       JavaDB
                          RESTful WS



                            Jersey
                          JavaFX UI




Montag, 8. Oktober 2012
Process Overview



Montag, 8. Oktober 2012
UX
                          Designer




Montag, 8. Oktober 2012
UX
                                     Developer
                          Designer




Montag, 8. Oktober 2012
UX
                                     Developer
                          Designer


                                      package com.oracle.conferenceplanner.controller;

                                      import   com.oracle.conferenceplanner.Env;
                                      import   com.oracle.conferenceplanner.Messages;
                                      import   com.oracle.conferenceplanner.entities.Session;
                                      import   com.oracle.conferenceplanner.entities.Speaker;
                                      import   com.oracle.conferenceplanner.view.GenericListCell;
                                      import   com.sun.javafx.util.MessageBus;
                                      import   java.net.URL;
                                      import   java.util.Collection;
                                      import   java.util.ResourceBundle;
                                      import   javafx.animation.Animation;
                                      import   javafx.animation.PauseTransitionBuilder;
                                      import   javafx.beans.value.ChangeListener;
                                      import   javafx.beans.value.ObservableValue;
                                      import   javafx.concurrent.Service;
                                      import   javafx.concurrent.Task;
                                      import   javafx.event.ActionEvent;
                                      import   javafx.event.EventHandler;
                                      import   javafx.fxml.FXML;
                                      import   javafx.fxml.Initializable;
                                      import   javafx.scene.control.*;
                                      import   javafx.scene.input.KeyEvent;
                                      import   javafx.util.Callback;
                                      import   javafx.util.Duration;

                                      /**
                                       *
                                       * @author Michael Heinrichs
                                       */
                                      public class MainScreen implements Initializable {

                                          @FXML   private   TextField searchField;
                                          @FXML   private   ToggleGroup toggleSearch;
                                          @FXML   private   Toggle toggleSession;
                                          @FXML   private   ProgressIndicator progressIndicator;
                                          @FXML   private   ListView searchResultList;

                                          private final Service<Collection<?>> dataFetcher = new
                                      Service<Collection<?>>() {
                                              @Override
                                              protected Task<Collection<?>> createTask() {
                                                  final String currentSearchString = searchField.getText();
                                                  final boolean getSessions =
                                      toggleSearch.getSelectedToggle().equals(toggleSession);
                                                  return new Task<Collection<?>>() {
                                                      @Override
                                                      protected Collection<?> call() throws Exception {
                                                          return getSessions?
                                                                  Session.findLike(Env.getInstance
                                      ().getWebResource(), currentSearchString)
                                                                  : Speaker.findLike(Env.getInstance
                                      ().getWebResource(), currentSearchString);
                                                      }
                                                  };
                                              }

                                                @Override




Montag, 8. Oktober 2012
UX                                                                                Graphical
                                     Developer
                          Designer                                                                            Designer


                                      package com.oracle.conferenceplanner.controller;

                                      import   com.oracle.conferenceplanner.Env;
                                      import   com.oracle.conferenceplanner.Messages;
                                      import   com.oracle.conferenceplanner.entities.Session;
                                      import   com.oracle.conferenceplanner.entities.Speaker;
                                      import   com.oracle.conferenceplanner.view.GenericListCell;
                                      import   com.sun.javafx.util.MessageBus;
                                      import   java.net.URL;
                                      import   java.util.Collection;
                                      import   java.util.ResourceBundle;
                                      import   javafx.animation.Animation;
                                      import   javafx.animation.PauseTransitionBuilder;
                                      import   javafx.beans.value.ChangeListener;
                                      import   javafx.beans.value.ObservableValue;
                                      import   javafx.concurrent.Service;
                                      import   javafx.concurrent.Task;
                                      import   javafx.event.ActionEvent;
                                      import   javafx.event.EventHandler;
                                      import   javafx.fxml.FXML;
                                      import   javafx.fxml.Initializable;
                                      import   javafx.scene.control.*;
                                      import   javafx.scene.input.KeyEvent;
                                      import   javafx.util.Callback;
                                      import   javafx.util.Duration;

                                      /**
                                       *
                                       * @author Michael Heinrichs
                                       */
                                      public class MainScreen implements Initializable {

                                          @FXML   private   TextField searchField;
                                          @FXML   private   ToggleGroup toggleSearch;
                                          @FXML   private   Toggle toggleSession;
                                          @FXML   private   ProgressIndicator progressIndicator;
                                          @FXML   private   ListView searchResultList;

                                          private final Service<Collection<?>> dataFetcher = new
                                      Service<Collection<?>>() {
                                              @Override
                                              protected Task<Collection<?>> createTask() {
                                                  final String currentSearchString = searchField.getText();
                                                  final boolean getSessions =
                                      toggleSearch.getSelectedToggle().equals(toggleSession);
                                                  return new Task<Collection<?>>() {
                                                      @Override
                                                      protected Collection<?> call() throws Exception {
                                                          return getSessions?
                                                                  Session.findLike(Env.getInstance
                                      ().getWebResource(), currentSearchString)
                                                                  : Speaker.findLike(Env.getInstance
                                      ().getWebResource(), currentSearchString);
                                                      }
                                                  };
                                              }

                                                @Override




Montag, 8. Oktober 2012
Graphical
                          Developer
                                                                                                   Designer


                           package com.oracle.conferenceplanner.controller;

                           import   com.oracle.conferenceplanner.Env;
                           import   com.oracle.conferenceplanner.Messages;
                           import   com.oracle.conferenceplanner.entities.Session;
                           import   com.oracle.conferenceplanner.entities.Speaker;
                           import   com.oracle.conferenceplanner.view.GenericListCell;
                           import   com.sun.javafx.util.MessageBus;
                           import   java.net.URL;
                           import   java.util.Collection;
                           import   java.util.ResourceBundle;
                           import   javafx.animation.Animation;
                           import   javafx.animation.PauseTransitionBuilder;
                           import   javafx.beans.value.ChangeListener;
                           import   javafx.beans.value.ObservableValue;
                           import   javafx.concurrent.Service;
                           import   javafx.concurrent.Task;
                           import   javafx.event.ActionEvent;
                           import   javafx.event.EventHandler;
                           import   javafx.fxml.FXML;
                           import   javafx.fxml.Initializable;
                           import   javafx.scene.control.*;
                           import   javafx.scene.input.KeyEvent;
                           import   javafx.util.Callback;
                           import   javafx.util.Duration;

                           /**
                            *
                            * @author Michael Heinrichs
                            */
                           public class MainScreen implements Initializable {

                               @FXML   private   TextField searchField;
                               @FXML   private   ToggleGroup toggleSearch;
                               @FXML   private   Toggle toggleSession;
                               @FXML   private   ProgressIndicator progressIndicator;
                               @FXML   private   ListView searchResultList;

                               private final Service<Collection<?>> dataFetcher = new
                           Service<Collection<?>>() {
                                   @Override
                                   protected Task<Collection<?>> createTask() {
                                       final String currentSearchString = searchField.getText();
                                       final boolean getSessions =
                           toggleSearch.getSelectedToggle().equals(toggleSession);
                                       return new Task<Collection<?>>() {
                                           @Override
                                           protected Collection<?> call() throws Exception {
                                               return getSessions?
                                                       Session.findLike(Env.getInstance
                           ().getWebResource(), currentSearchString)
                                                       : Speaker.findLike(Env.getInstance
                           ().getWebResource(), currentSearchString);
                                           }
                                       };
                                   }

                                     @Override




Montag, 8. Oktober 2012
Developer



                           package com.oracle.conferenceplanner.controller;

                           import   com.oracle.conferenceplanner.Env;
                           import   com.oracle.conferenceplanner.Messages;
                           import   com.oracle.conferenceplanner.entities.Session;
                           import   com.oracle.conferenceplanner.entities.Speaker;
                           import   com.oracle.conferenceplanner.view.GenericListCell;
                           import   com.sun.javafx.util.MessageBus;
                           import   java.net.URL;
                           import   java.util.Collection;
                           import   java.util.ResourceBundle;
                           import   javafx.animation.Animation;
                           import   javafx.animation.PauseTransitionBuilder;
                           import   javafx.beans.value.ChangeListener;
                           import   javafx.beans.value.ObservableValue;
                           import   javafx.concurrent.Service;
                           import   javafx.concurrent.Task;
                           import   javafx.event.ActionEvent;
                           import   javafx.event.EventHandler;
                           import   javafx.fxml.FXML;
                           import   javafx.fxml.Initializable;
                           import   javafx.scene.control.*;
                           import   javafx.scene.input.KeyEvent;
                           import   javafx.util.Callback;
                           import   javafx.util.Duration;

                           /**
                            *
                            * @author Michael Heinrichs
                            */
                           public class MainScreen implements Initializable {

                               @FXML   private   TextField searchField;
                               @FXML   private   ToggleGroup toggleSearch;
                               @FXML   private   Toggle toggleSession;
                               @FXML   private   ProgressIndicator progressIndicator;
                               @FXML   private   ListView searchResultList;

                               private final Service<Collection<?>> dataFetcher = new
                           Service<Collection<?>>() {
                                   @Override
                                   protected Task<Collection<?>> createTask() {
                                       final String currentSearchString = searchField.getText();
                                       final boolean getSessions =
                           toggleSearch.getSelectedToggle().equals(toggleSession);
                                       return new Task<Collection<?>>() {
                                           @Override
                                           protected Collection<?> call() throws Exception {
                                               return getSessions?
                                                       Session.findLike(Env.getInstance
                           ().getWebResource(), currentSearchString)
                                                       : Speaker.findLike(Env.getInstance
                           ().getWebResource(), currentSearchString);
                                           }
                                       };
                                   }

                                     @Override




Montag, 8. Oktober 2012
UX                                                                                Graphical
                                     Developer
                          Designer                                                                            Designer


                                      package com.oracle.conferenceplanner.controller;

                                      import   com.oracle.conferenceplanner.Env;
                                      import   com.oracle.conferenceplanner.Messages;
                                      import   com.oracle.conferenceplanner.entities.Session;
                                      import   com.oracle.conferenceplanner.entities.Speaker;
                                      import   com.oracle.conferenceplanner.view.GenericListCell;
                                      import   com.sun.javafx.util.MessageBus;
                                      import   java.net.URL;
                                      import   java.util.Collection;
                                      import   java.util.ResourceBundle;
                                      import   javafx.animation.Animation;
                                      import   javafx.animation.PauseTransitionBuilder;
                                      import   javafx.beans.value.ChangeListener;
                                      import   javafx.beans.value.ObservableValue;
                                      import   javafx.concurrent.Service;
                                      import   javafx.concurrent.Task;
                                      import   javafx.event.ActionEvent;
                                      import   javafx.event.EventHandler;
                                      import   javafx.fxml.FXML;
                                      import   javafx.fxml.Initializable;
                                      import   javafx.scene.control.*;
                                      import   javafx.scene.input.KeyEvent;
                                      import   javafx.util.Callback;
                                      import   javafx.util.Duration;

                                      /**
                                       *
                                       * @author Michael Heinrichs
                                       */
                                      public class MainScreen implements Initializable {

                                          @FXML   private   TextField searchField;
                                          @FXML   private   ToggleGroup toggleSearch;
                                          @FXML   private   Toggle toggleSession;
                                          @FXML   private   ProgressIndicator progressIndicator;
                                          @FXML   private   ListView searchResultList;

                                          private final Service<Collection<?>> dataFetcher = new
                                      Service<Collection<?>>() {
                                              @Override
                                              protected Task<Collection<?>> createTask() {
                                                  final String currentSearchString = searchField.getText();
                                                  final boolean getSessions =
                                      toggleSearch.getSelectedToggle().equals(toggleSession);
                                                  return new Task<Collection<?>>() {
                                                      @Override
                                                      protected Collection<?> call() throws Exception {
                                                          return getSessions?
                                                                  Session.findLike(Env.getInstance
                                      ().getWebResource(), currentSearchString)
                                                                  : Speaker.findLike(Env.getInstance
                                      ().getWebResource(), currentSearchString);
                                                      }
                                                  };
                                              }

                                                @Override




Montag, 8. Oktober 2012
UX                                                                                                                                            Graphical
                                                                                                 Developer
                          Designer                                                                                                                                        Designer


                          <?xml version="1.0" encoding="UTF-8"?>                                  package com.oracle.conferenceplanner.controller;

                          <?import   com.oracle.conferenceplanner.view.*?>                        import   com.oracle.conferenceplanner.Env;
                          <?import   java.lang.*?>                                                import   com.oracle.conferenceplanner.Messages;
                          <?import   java.util.*?>                                                import   com.oracle.conferenceplanner.entities.Session;
                          <?import   javafx.geometry.*?>                                          import   com.oracle.conferenceplanner.entities.Speaker;
                          <?import   javafx.scene.control.*?>                                     import   com.oracle.conferenceplanner.view.GenericListCell;
                          <?import   javafx.scene.layout.*?>                                      import   com.sun.javafx.util.MessageBus;
                          <?import   javafx.scene.paint.*?>                                       import   java.net.URL;
                          <?import   javafx.scene.shape.*?>                                       import   java.util.Collection;
                                                                                                  import   java.util.ResourceBundle;
                          <SplitPane dividerPositions="0.3" focusTraversable="true"               import   javafx.animation.Animation;
                          xmlns:fx="http://javafx.com/fxml"                                       import   javafx.animation.PauseTransitionBuilder;
                          fx:controller="com.oracle.conferenceplanner.controller.MainScreen">     import   javafx.beans.value.ChangeListener;
                            <items>                                                               import   javafx.beans.value.ObservableValue;
                              <AnchorPane>                                                        import   javafx.concurrent.Service;
                                <children>                                                        import   javafx.concurrent.Task;
                                  <VBox spacing="10.0" AnchorPane.bottomAnchor="0.0"              import   javafx.event.ActionEvent;
                          AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0"                import   javafx.event.EventHandler;
                          AnchorPane.topAnchor="0.0">                                             import   javafx.fxml.FXML;
                                    <children>                                                    import   javafx.fxml.Initializable;
                                      <TextField fx:id="searchField" minHeight="-Infinity"        import   javafx.scene.control.*;
                          onKeyTyped="#handleSearchBoxTyped" promptText="Search" />               import   javafx.scene.input.KeyEvent;
                                      <HBox spacing="10.0">                                       import   javafx.util.Callback;
                                        <children>                                                import   javafx.util.Duration;
                                           <ToggleButton fx:id="toggleSession" selected="true"
                          text="Session">                                                         /**
                                             <toggleGroup>                                         *
                                               <ToggleGroup fx:id="toggleSearch" />                * @author Michael Heinrichs
                                             </toggleGroup>                                        */
                                           </ToggleButton>                                        public class MainScreen implements Initializable {
                                           <ToggleButton fx:id="toggleSpeaker" text="Speaker"
                          toggleGroup="$toggleSearch" />                                              @FXML   private   TextField searchField;
                                        </children>                                                   @FXML   private   ToggleGroup toggleSearch;
                                      </HBox>                                                         @FXML   private   Toggle toggleSession;
                                      <StackPane VBox.vgrow="ALWAYS">                                 @FXML   private   ProgressIndicator progressIndicator;
                                        <children>                                                    @FXML   private   ListView searchResultList;
                                           <ListView fx:id="searchResultList" />
                                           <ProgressIndicator fx:id="progressIndicator"               private final Service<Collection<?>> dataFetcher = new
                          maxHeight="-Infinity" maxWidth="-Infinity" visible="false" />           Service<Collection<?>>() {
                                        </children>                                                       @Override
                                      </StackPane>                                                        protected Task<Collection<?>> createTask() {
                                    </children>                                                               final String currentSearchString = searchField.getText();
                                  </VBox>                                                                     final boolean getSessions =
                                </children>                                                       toggleSearch.getSelectedToggle().equals(toggleSession);
                                <padding>                                                                     return new Task<Collection<?>>() {
                                  <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />                    @Override
                                </padding>                                                                        protected Collection<?> call() throws Exception {
                              </AnchorPane>                                                                           return getSessions?
                              <AnchorPane>                                                                                    Session.findLike(Env.getInstance
                                <children>                                                        ().getWebResource(), currentSearchString)
                                  <StackPane fx:id="detailsPane" AnchorPane.bottomAnchor="0.0"                                : Speaker.findLike(Env.getInstance
                          AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0"                ().getWebResource(), currentSearchString);
                          AnchorPane.topAnchor="0.0">                                                             }
                                    <children>                                                                };
                                      <fx:include source="session_details.fxml"/>                         }
                                      <fx:include source="speaker_details.fxml"/>
                                    </children>                                                             @Override




Montag, 8. Oktober 2012
UX                                                                                                                                            Graphical
                                                                                                 Developer
                          Designer                                                                                                                                        Designer


                          <?xml version="1.0" encoding="UTF-8"?>                                  package com.oracle.conferenceplanner.controller;
                                                                                                                                                                           .root {
                          <?import   com.oracle.conferenceplanner.view.*?>                        import   com.oracle.conferenceplanner.Env;                                   -fx-background-color: black;
                          <?import   java.lang.*?>                                                import   com.oracle.conferenceplanner.Messages;                              -fx-font-family: 'Impact';
                          <?import   java.util.*?>                                                import   com.oracle.conferenceplanner.entities.Session;                  /*    -fx-font-fill: #99C0D0;*/
                          <?import   javafx.geometry.*?>                                          import   com.oracle.conferenceplanner.entities.Speaker;                      -fx-font-fill: black;
                          <?import   javafx.scene.control.*?>                                     import   com.oracle.conferenceplanner.view.GenericListCell;              }
                          <?import   javafx.scene.layout.*?>                                      import   com.sun.javafx.util.MessageBus;                                 .label {
                          <?import   javafx.scene.paint.*?>                                       import   java.net.URL;                                                       -fx-text-fill: #7C5FDD;
                          <?import   javafx.scene.shape.*?>                                       import   java.util.Collection;                                           }
                                                                                                  import   java.util.ResourceBundle;                                       .text-area {
                          <SplitPane dividerPositions="0.3" focusTraversable="true"               import   javafx.animation.Animation;                                         -fx-text-fill: #7C5FDD;
                          xmlns:fx="http://javafx.com/fxml"                                       import   javafx.animation.PauseTransitionBuilder;                        }
                          fx:controller="com.oracle.conferenceplanner.controller.MainScreen">     import   javafx.beans.value.ChangeListener;                              .text-field {
                            <items>                                                               import   javafx.beans.value.ObservableValue;                                 -fx-background-color: transparent;
                              <AnchorPane>                                                        import   javafx.concurrent.Service;                                          -fx-border-color: #7C5FDD;
                                <children>                                                        import   javafx.concurrent.Task;                                             -fx-text-fill: #D99C10;
                                  <VBox spacing="10.0" AnchorPane.bottomAnchor="0.0"              import   javafx.event.ActionEvent;                                           -fx-prompt-text-fill: #7C5FDD;
                          AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0"                import   javafx.event.EventHandler;                                          -fx-cursor: text;
                          AnchorPane.topAnchor="0.0">                                             import   javafx.fxml.FXML;                                               }
                                    <children>                                                    import   javafx.fxml.Initializable;
                                      <TextField fx:id="searchField" minHeight="-Infinity"        import   javafx.scene.control.*;                                         .toggle-button {
                          onKeyTyped="#handleSearchBoxTyped" promptText="Search" />               import   javafx.scene.input.KeyEvent;                                        -fx-background-color: #7C5FDD;
                                      <HBox spacing="10.0">                                       import   javafx.util.Callback;                                               -fx-background-radius: 0;
                                        <children>                                                import   javafx.util.Duration;                                               -fx-text-fill: black;
                                           <ToggleButton fx:id="toggleSession" selected="true"                                                                                 -fx-alignment: CENTER;
                          text="Session">                                                         /**                                                                          -fx-content-display: LEFT;
                                             <toggleGroup>                                         *                                                                       }
                                               <ToggleGroup fx:id="toggleSearch" />                * @author Michael Heinrichs
                                             </toggleGroup>                                        */                                                                      .toggle-button:selected {
                                           </ToggleButton>                                        public class MainScreen implements Initializable {                           -fx-background-color: #D99C10;
                                           <ToggleButton fx:id="toggleSpeaker" text="Speaker"                                                                              }
                          toggleGroup="$toggleSearch" />                                              @FXML   private   TextField searchField;
                                        </children>                                                   @FXML   private   ToggleGroup toggleSearch;                          .list-view {
                                      </HBox>                                                         @FXML   private   Toggle toggleSession;                                  -fx-background-color: transparent;
                                      <StackPane VBox.vgrow="ALWAYS">                                 @FXML   private   ProgressIndicator progressIndicator;               }
                                        <children>                                                    @FXML   private   ListView searchResultList;
                                           <ListView fx:id="searchResultList" />                                                                                           .list-view:vertical .list-cell {
                                           <ProgressIndicator fx:id="progressIndicator"               private final Service<Collection<?>> dataFetcher = new                   -fx-background-insets: 0, 5 0, 10 15, 0 25;
                          maxHeight="-Infinity" maxWidth="-Infinity" visible="false" />           Service<Collection<?>>() {                                                   -fx-padding: 15 20;
                                        </children>                                                       @Override                                                        }
                                      </StackPane>                                                        protected Task<Collection<?>> createTask() {
                                    </children>                                                               final String currentSearchString = searchField.getText();    .list-view:horizontal .list-cell {
                                  </VBox>                                                                     final boolean getSessions =                                      -fx-background-insets: 0, 0 5, 5 20, 0 30;
                                </children>                                                       toggleSearch.getSelectedToggle().equals(toggleSession);                      -fx-padding: 10 25;
                                <padding>                                                                     return new Task<Collection<?>>() {                           }
                                  <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />                    @Override
                                </padding>                                                                        protected Collection<?> call() throws Exception {        .list-cell {
                              </AnchorPane>                                                                           return getSessions?                                      -fx-background-color: black, #7C5FDD, black, black;
                              <AnchorPane>                                                                                    Session.findLike(Env.getInstance                 -fx-background-radius: 0, 10, 5, 0;
                                <children>                                                        ().getWebResource(), currentSearchString)                                }
                                  <StackPane fx:id="detailsPane" AnchorPane.bottomAnchor="0.0"                                : Speaker.findLike(Env.getInstance
                          AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0"                ().getWebResource(), currentSearchString);                               .list-cell .label {
                          AnchorPane.topAnchor="0.0">                                                             }                                                            -fx-text-fill: #7C5FDD;
                                    <children>                                                                };                                                           }
                                      <fx:include source="session_details.fxml"/>                         }
                                      <fx:include source="speaker_details.fxml"/>                                                                                          .list-cell .title {
                                    </children>                                                             @Override                                                          -fx-text-fill: #D99C10;




Montag, 8. Oktober 2012
Developer
                                                                                       package com.oracle.conferenceplanner.controller;

                                                                                       import  com.oracle.conferenceplanner.Env;
                                                                                       import  com.oracle.conferenceplanner.Messages;
                                                                                       import  com.oracle.conferenceplanner.entities.Session;
                                                                                       import  com.oracle.conferenceplanner.entities.Speaker;
                                                                                       import  com.oracle.conferenceplanner.view.GenericListCell;
                                                                                       import  com.sun.javafx.util.MessageBus;
                                                                                       import  java.net.URL;
                                                                                       import  java.util.Collection;
                                                                                       import  java.util.ResourceBundle;
                                                                                       import  javafx.animation.Animation;
                                                                                       import  javafx.animation.PauseTransitionBuilder;
                                                                                       import  javafx.beans.value.ChangeListener;
                                                                                       import  javafx.beans.value.ObservableValue;
                                                                                       import  javafx.concurrent.Service;
                                                                                       import  javafx.concurrent.Task;
                                                                                       import  javafx.event.ActionEvent;
                                                                                       import  javafx.event.EventHandler;
                                                                                       import  javafx.fxml.FXML;
                                                                                       import  javafx.fxml.Initializable;
                                                                                       import  javafx.scene.control.*;           .root {
                                                                                       import  javafx.scene.input.KeyEvent;          -fx-background-color: black;
                                                                                       import  javafx.util.Callback;                 -fx-font-family: 'Impact';
                                                                                       import  javafx.util.Duration;             /*    -fx-font-fill: #99C0D0;*/
                                                                                                                                     -fx-font-fill: black;
                                                                                        /**                                      }
                                     <?xml version="1.0" encoding="UTF-8"?>              *                                       .label {
                                                                                         * @author Michael Heinrichs                 -fx-text-fill: #7C5FDD;
                                     <?import com.oracle.conferenceplanner.view.*?>      */                                      }
                                     <?import java.lang.*?>                             public class MainScreen implements Initializable { {
                                                                                                                                 .text-area
                                     <?import java.util.*?>                                                                          -fx-text-fill: #7C5FDD;
                                     <?import javafx.geometry.*?>                           @FXML private TextField searchField; }
                                     <?import javafx.scene.control.*?>                                                           .text-field {
                                                                                            @FXML private ToggleGroup toggleSearch;
                                     <?import javafx.scene.layout.*?>                       @FXML private Toggle toggleSession;      -fx-background-color: transparent;
                                     <?import javafx.scene.paint.*?>                                                                 -fx-border-color: #7C5FDD;
                                                                                            @FXML private ProgressIndicator progressIndicator;
                                     <?import javafx.scene.shape.*?>                        @FXML private ListView searchResultList; -fx-text-fill: #D99C10;
                                                                                                                                     -fx-prompt-text-fill: #7C5FDD;
                                     <SplitPane dividerPositions="0.3" focusTraversable="true"                                       -fx-cursor: text;
                                                                                            private final Service<Collection<?>> dataFetcher = new
                                     xmlns:fx="http://javafx.com/fxml"                  Service<Collection<?>>() {               }
                                     fx:controller="com.oracle.conferenceplanner.controller.MainScreen">
                                                                                                @Override
                                       <items>                                                                                   .toggle-button {
                                                                                                protected Task<Collection<?>> createTask() {
                                         <AnchorPane>                                                                                -fx-background-color: #7C5FDD;
                                                                                                    final String currentSearchString = searchField.getText();
                                           <children>                                               final boolean getSessions =      -fx-background-radius: 0;
                                             <VBox spacing="10.0" AnchorPane.bottomAnchor="0.0"                                      -fx-text-fill: black;
                                                                                        toggleSearch.getSelectedToggle().equals(toggleSession);
                                     AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0"                                        -fx-alignment: CENTER;
                                                                                                    return new Task<Collection<?>>() {
                                     AnchorPane.topAnchor="0.0">                                        @Override                    -fx-content-display: LEFT;
                                               <children>                                               protected Collection<?> }call() throws Exception {
                                                 <TextField fx:id="searchField" minHeight="-Infinity"        return getSessions?
                                     onKeyTyped="#handleSearchBoxTyped" promptText="Search" />                                   .toggle-button:selected {
                                                                                                                     Session.findLike(Env.getInstance
                                                 <HBox spacing="10.0">                  ().getWebResource(), currentSearchString)    -fx-background-color: #D99C10;
                                                   <children>                                                                    }
                                                                                                                     : Speaker.findLike(Env.getInstance
                                                      <ToggleButton fx:id="toggleSession" selected="true"
                                                                                        ().getWebResource(), currentSearchString);
                                     text="Session">                                                    }                        .list-view {
                                                        <toggleGroup>                               };                               -fx-background-color: transparent;
                                                          <ToggleGroup fx:id="toggleSearch" /> }                                 }
                                                        </toggleGroup>
                                                      </ToggleButton>                           @Override                        .list-view:vertical .list-cell {
                                                      <ToggleButton fx:id="toggleSpeaker" text="Speaker"                             -fx-background-insets: 0, 5 0, 10 15, 0 25;
                                     toggleGroup="$toggleSearch" />                                                                  -fx-padding: 15 20;
                                                   </children>                                                                   }
                                                 </HBox>
                                                 <StackPane VBox.vgrow="ALWAYS">                                                 .list-view:horizontal .list-cell {
                                                   <children>                                                                        -fx-background-insets: 0, 0 5, 5 20, 0 30;
                                                      <ListView fx:id="searchResultList" />                                          -fx-padding: 10 25;
                                                      <ProgressIndicator fx:id="progressIndicator"                               }
                                     maxHeight="-Infinity" maxWidth="-Infinity" visible="false" />
                                                   </children>                                                                   .list-cell {
                                                 </StackPane>                                                                        -fx-background-color: black, #7C5FDD, black, black;
                                               </children>                                                                           -fx-background-radius: 0, 10, 5, 0;
                                             </VBox>                                                                             }
                                           </children>
                                           <padding>                                                                             .list-cell .label {
                                             <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />                            -fx-text-fill: #7C5FDD;
                                           </padding>                                                                            }
                                         </AnchorPane>
                                         <AnchorPane>                                                                            .list-cell .title {
                                           <children>                                                                                -fx-text-fill: #D99C10;
                                             <StackPane fx:id="detailsPane" AnchorPane.bottomAnchor="0.0"
                                     AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0"
                                     AnchorPane.topAnchor="0.0">
                                               <children>
                                                 <fx:include source="session_details.fxml"/>
                                                 <fx:include source="speaker_details.fxml"/>
                                               </children>




                            UX                                                                                                                                                             Graphical
                                                                                          JavaFX
                          Designer                                                                                                                                                         Designer


Montag, 8. Oktober 2012
Defining the view



Montag, 8. Oktober 2012
Montag, 8. Oktober 2012
Stage
                            Scene




                          Scenegraph



Montag, 8. Oktober 2012
JFrame
                          Name                   JFXPanel : JComponent
                          Adress                         Scene

                          Mail




                                                      Scenegraph
                            OK     Cancel

Montag, 8. Oktober 2012
Montag, 8. Oktober 2012
Montag, 8. Oktober 2012
Hooking up Controllers



Montag, 8. Oktober 2012
Montag, 8. Oktober 2012
Montag, 8. Oktober 2012
Montag, 8. Oktober 2012
Montag, 8. Oktober 2012
Montag, 8. Oktober 2012
Layouts



Montag, 8. Oktober 2012
Montag, 8. Oktober 2012
Montag, 8. Oktober 2012
Top




                          Left    Center   Right




                                 Bottom

Montag, 8. Oktober 2012
Montag, 8. Oktober 2012
Montag, 8. Oktober 2012
Montag, 8. Oktober 2012
Montag, 8. Oktober 2012
Montag, 8. Oktober 2012
•child.setLayoutX(10);
                          •vBox.setAlignment(Pos.CENTER);
                          •VBox.setMargin(child, new Insets(10));


Montag, 8. Oktober 2012
Data Binding



Montag, 8. Oktober 2012
Java EE
                                       JavaDB
                          RESTful WS



                            Jersey
                          JavaFX UI




Montag, 8. Oktober 2012
Montag, 8. Oktober 2012
Montag, 8. Oktober 2012
Styling with CSS



Montag, 8. Oktober 2012
Montag, 8. Oktober 2012
Montag, 8. Oktober 2012
Montag, 8. Oktober 2012
Montag, 8. Oktober 2012
Montag, 8. Oktober 2012
Montag, 8. Oktober 2012
Summary



Montag, 8. Oktober 2012
Montag, 8. Oktober 2012
UX                                                                                Graphical
                                     Developer
                          Designer                                                                            Designer


                                      package com.oracle.conferenceplanner.controller;

                                      import   com.oracle.conferenceplanner.Env;
                                      import   com.oracle.conferenceplanner.Messages;
                                      import   com.oracle.conferenceplanner.entities.Session;
                                      import   com.oracle.conferenceplanner.entities.Speaker;
                                      import   com.oracle.conferenceplanner.view.GenericListCell;
                                      import   com.sun.javafx.util.MessageBus;
                                      import   java.net.URL;
                                      import   java.util.Collection;
                                      import   java.util.ResourceBundle;
                                      import   javafx.animation.Animation;
                                      import   javafx.animation.PauseTransitionBuilder;
                                      import   javafx.beans.value.ChangeListener;
                                      import   javafx.beans.value.ObservableValue;
                                      import   javafx.concurrent.Service;
                                      import   javafx.concurrent.Task;
                                      import   javafx.event.ActionEvent;
                                      import   javafx.event.EventHandler;
                                      import   javafx.fxml.FXML;
                                      import   javafx.fxml.Initializable;
                                      import   javafx.scene.control.*;
                                      import   javafx.scene.input.KeyEvent;
                                      import   javafx.util.Callback;
                                      import   javafx.util.Duration;

                                      /**
                                       *
                                       * @author Michael Heinrichs
                                       */
                                      public class MainScreen implements Initializable {

                                          @FXML   private   TextField searchField;
                                          @FXML   private   ToggleGroup toggleSearch;
                                          @FXML   private   Toggle toggleSession;
                                          @FXML   private   ProgressIndicator progressIndicator;
                                          @FXML   private   ListView searchResultList;

                                          private final Service<Collection<?>> dataFetcher = new
                                      Service<Collection<?>>() {
                                              @Override
                                              protected Task<Collection<?>> createTask() {
                                                  final String currentSearchString = searchField.getText();
                                                  final boolean getSessions =
                                      toggleSearch.getSelectedToggle().equals(toggleSession);
                                                  return new Task<Collection<?>>() {
                                                      @Override
                                                      protected Collection<?> call() throws Exception {
                                                          return getSessions?
                                                                  Session.findLike(Env.getInstance
                                      ().getWebResource(), currentSearchString)
                                                                  : Speaker.findLike(Env.getInstance
                                      ().getWebResource(), currentSearchString);
                                                      }
                                                  };
                                              }

                                                @Override




Montag, 8. Oktober 2012
Developer
                                                                                       package com.oracle.conferenceplanner.controller;

                                                                                       import  com.oracle.conferenceplanner.Env;
                                                                                       import  com.oracle.conferenceplanner.Messages;
                                                                                       import  com.oracle.conferenceplanner.entities.Session;
                                                                                       import  com.oracle.conferenceplanner.entities.Speaker;
                                                                                       import  com.oracle.conferenceplanner.view.GenericListCell;
                                                                                       import  com.sun.javafx.util.MessageBus;
                                                                                       import  java.net.URL;
                                                                                       import  java.util.Collection;
                                                                                       import  java.util.ResourceBundle;
                                                                                       import  javafx.animation.Animation;
                                                                                       import  javafx.animation.PauseTransitionBuilder;
                                                                                       import  javafx.beans.value.ChangeListener;
                                                                                       import  javafx.beans.value.ObservableValue;
                                                                                       import  javafx.concurrent.Service;
                                                                                       import  javafx.concurrent.Task;
                                                                                       import  javafx.event.ActionEvent;
                                                                                       import  javafx.event.EventHandler;
                                                                                       import  javafx.fxml.FXML;
                                                                                       import  javafx.fxml.Initializable;
                                                                                       import  javafx.scene.control.*;           .root {
                                                                                       import  javafx.scene.input.KeyEvent;          -fx-background-color: black;
                                                                                       import  javafx.util.Callback;                 -fx-font-family: 'Impact';
                                                                                       import  javafx.util.Duration;             /*    -fx-font-fill: #99C0D0;*/
                                                                                                                                     -fx-font-fill: black;
                                                                                        /**                                      }
                                     <?xml version="1.0" encoding="UTF-8"?>              *                                       .label {
                                                                                         * @author Michael Heinrichs                 -fx-text-fill: #7C5FDD;
                                     <?import com.oracle.conferenceplanner.view.*?>      */                                      }
                                     <?import java.lang.*?>                             public class MainScreen implements Initializable { {
                                                                                                                                 .text-area
                                     <?import java.util.*?>                                                                          -fx-text-fill: #7C5FDD;
                                     <?import javafx.geometry.*?>                           @FXML private TextField searchField; }
                                     <?import javafx.scene.control.*?>                                                           .text-field {
                                                                                            @FXML private ToggleGroup toggleSearch;
                                     <?import javafx.scene.layout.*?>                       @FXML private Toggle toggleSession;      -fx-background-color: transparent;
                                     <?import javafx.scene.paint.*?>                                                                 -fx-border-color: #7C5FDD;
                                                                                            @FXML private ProgressIndicator progressIndicator;
                                     <?import javafx.scene.shape.*?>                        @FXML private ListView searchResultList; -fx-text-fill: #D99C10;
                                                                                                                                     -fx-prompt-text-fill: #7C5FDD;
                                     <SplitPane dividerPositions="0.3" focusTraversable="true"                                       -fx-cursor: text;
                                                                                            private final Service<Collection<?>> dataFetcher = new
                                     xmlns:fx="http://javafx.com/fxml"                  Service<Collection<?>>() {               }
                                     fx:controller="com.oracle.conferenceplanner.controller.MainScreen">
                                                                                                @Override
                                       <items>                                                                                   .toggle-button {
                                                                                                protected Task<Collection<?>> createTask() {
                                         <AnchorPane>                                                                                -fx-background-color: #7C5FDD;
                                                                                                    final String currentSearchString = searchField.getText();
                                           <children>                                               final boolean getSessions =      -fx-background-radius: 0;
                                             <VBox spacing="10.0" AnchorPane.bottomAnchor="0.0"                                      -fx-text-fill: black;
                                                                                        toggleSearch.getSelectedToggle().equals(toggleSession);
                                     AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0"                                        -fx-alignment: CENTER;
                                                                                                    return new Task<Collection<?>>() {
                                     AnchorPane.topAnchor="0.0">                                        @Override                    -fx-content-display: LEFT;
                                               <children>                                               protected Collection<?> }call() throws Exception {
                                                 <TextField fx:id="searchField" minHeight="-Infinity"        return getSessions?
                                     onKeyTyped="#handleSearchBoxTyped" promptText="Search" />                                   .toggle-button:selected {
                                                                                                                     Session.findLike(Env.getInstance
                                                 <HBox spacing="10.0">                  ().getWebResource(), currentSearchString)    -fx-background-color: #D99C10;
                                                   <children>                                                                    }
                                                                                                                     : Speaker.findLike(Env.getInstance
                                                      <ToggleButton fx:id="toggleSession" selected="true"
                                                                                        ().getWebResource(), currentSearchString);
                                     text="Session">                                                    }                        .list-view {
                                                        <toggleGroup>                               };                               -fx-background-color: transparent;
                                                          <ToggleGroup fx:id="toggleSearch" /> }                                 }
                                                        </toggleGroup>
                                                      </ToggleButton>                           @Override                        .list-view:vertical .list-cell {
                                                      <ToggleButton fx:id="toggleSpeaker" text="Speaker"                             -fx-background-insets: 0, 5 0, 10 15, 0 25;
                                     toggleGroup="$toggleSearch" />                                                                  -fx-padding: 15 20;
                                                   </children>                                                                   }
                                                 </HBox>
                                                 <StackPane VBox.vgrow="ALWAYS">                                                 .list-view:horizontal .list-cell {
                                                   <children>                                                                        -fx-background-insets: 0, 0 5, 5 20, 0 30;
                                                      <ListView fx:id="searchResultList" />                                          -fx-padding: 10 25;
                                                      <ProgressIndicator fx:id="progressIndicator"                               }
                                     maxHeight="-Infinity" maxWidth="-Infinity" visible="false" />
                                                   </children>                                                                   .list-cell {
                                                 </StackPane>                                                                        -fx-background-color: black, #7C5FDD, black, black;
                                               </children>                                                                           -fx-background-radius: 0, 10, 5, 0;
                                             </VBox>                                                                             }
                                           </children>
                                           <padding>                                                                             .list-cell .label {
                                             <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />                            -fx-text-fill: #7C5FDD;
                                           </padding>                                                                            }
                                         </AnchorPane>
                                         <AnchorPane>                                                                            .list-cell .title {
                                           <children>                                                                                -fx-text-fill: #D99C10;
                                             <StackPane fx:id="detailsPane" AnchorPane.bottomAnchor="0.0"
                                     AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0"
                                     AnchorPane.topAnchor="0.0">
                                               <children>
                                                 <fx:include source="session_details.fxml"/>
                                                 <fx:include source="speaker_details.fxml"/>
                                               </children>




                            UX                                                                                                                                                             Graphical
                                                                                          JavaFX
                          Designer                                                                                                                                                         Designer


Montag, 8. Oktober 2012
• http://blog.netopyr.com
                           @net0pyr

                          • JavaFX Website
                           http://javafx.com

                          • OTN Forum
                           http://forums.oracle.com

                          • Bugs and Feature Requests
                           http://javafx-jira.kenai.com

                          • API Discussions
                           openjfx-dev@openjdk.java.net

Montag, 8. Oktober 2012
Montag, 8. Oktober 2012
Copyright © 2011, Oracle and/or its affiliates. All rights reserved.   Insert Information Protection Policy Classification from Slide 8


Montag, 8. Oktober 2012

More Related Content

What's hot

50 new features of Java EE 7 in 50 minutes
50 new features of Java EE 7 in 50 minutes50 new features of Java EE 7 in 50 minutes
50 new features of Java EE 7 in 50 minutes
Antonio Goncalves
 
#36.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_재직자환급교육,실업자교육,국비지원교육, 자바교육,구...
#36.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_재직자환급교육,실업자교육,국비지원교육, 자바교육,구...#36.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_재직자환급교육,실업자교육,국비지원교육, 자바교육,구...
#36.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_재직자환급교육,실업자교육,국비지원교육, 자바교육,구...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
안드로이드 데이터 바인딩
안드로이드 데이터 바인딩안드로이드 데이터 바인딩
안드로이드 데이터 바인딩
GDG Korea
 
Under the Hood: Using Spring in Grails
Under the Hood: Using Spring in GrailsUnder the Hood: Using Spring in Grails
Under the Hood: Using Spring in Grails
Burt Beckwith
 
JavaFX 2 and Scala - Like Milk and Cookies (33rd Degrees)
JavaFX 2 and Scala - Like Milk and Cookies (33rd Degrees)JavaFX 2 and Scala - Like Milk and Cookies (33rd Degrees)
JavaFX 2 and Scala - Like Milk and Cookies (33rd Degrees)
Stephen Chin
 
Maximize the power of OSGi
Maximize the power of OSGiMaximize the power of OSGi
Maximize the power of OSGi
David Bosschaert
 
iOS Behavior-Driven Development
iOS Behavior-Driven DevelopmentiOS Behavior-Driven Development
iOS Behavior-Driven Development
Brian Gesiak
 
CDI e as ideias pro futuro do VRaptor
CDI e as ideias pro futuro do VRaptorCDI e as ideias pro futuro do VRaptor
CDI e as ideias pro futuro do VRaptor
Caelum
 
Test-driven Development with AEM
Test-driven Development with AEMTest-driven Development with AEM
Test-driven Development with AEM
Jan Wloka
 
Java Libraries You Can’t Afford to Miss
Java Libraries You Can’t Afford to MissJava Libraries You Can’t Afford to Miss
Java Libraries You Can’t Afford to Miss
Andres Almiray
 
Spring 4 - A&BP CC
Spring 4 - A&BP CCSpring 4 - A&BP CC
Spring 4 - A&BP CC
JWORKS powered by Ordina
 
Unit Testing at Scale
Unit Testing at ScaleUnit Testing at Scale
Unit Testing at Scale
Jan Wloka
 
Apple Templates Considered Harmful
Apple Templates Considered HarmfulApple Templates Considered Harmful
Apple Templates Considered Harmful
Brian Gesiak
 
JavaFX and Scala in the Cloud
JavaFX and Scala in the CloudJavaFX and Scala in the Cloud
JavaFX and Scala in the Cloud
Stephen Chin
 
Automated%20testing%20with%20Espresso2.x
Automated%20testing%20with%20Espresso2.xAutomated%20testing%20with%20Espresso2.x
Automated%20testing%20with%20Espresso2.x
Tatsuya Maki
 
Arquillian in a nutshell
Arquillian in a nutshellArquillian in a nutshell
Arquillian in a nutshell
Brockhaus Group
 
Junit 5 - Maior e melhor
Junit 5 - Maior e melhorJunit 5 - Maior e melhor
Junit 5 - Maior e melhor
Tiago de Freitas Lima
 
Vert.x - Reactive & Distributed [Devoxx version]
Vert.x - Reactive & Distributed [Devoxx version]Vert.x - Reactive & Distributed [Devoxx version]
Vert.x - Reactive & Distributed [Devoxx version]
Orkhan Gasimov
 
Ow2 Utilities, OW2con'12, Paris
Ow2 Utilities, OW2con'12, ParisOw2 Utilities, OW2con'12, Paris
Ow2 Utilities, OW2con'12, Paris
OW2
 
12 hibernate int&cache
12  hibernate int&cache12  hibernate int&cache
12 hibernate int&cache
thirumuru2012
 

What's hot (20)

50 new features of Java EE 7 in 50 minutes
50 new features of Java EE 7 in 50 minutes50 new features of Java EE 7 in 50 minutes
50 new features of Java EE 7 in 50 minutes
 
#36.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_재직자환급교육,실업자교육,국비지원교육, 자바교육,구...
#36.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_재직자환급교육,실업자교육,국비지원교육, 자바교육,구...#36.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_재직자환급교육,실업자교육,국비지원교육, 자바교육,구...
#36.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_재직자환급교육,실업자교육,국비지원교육, 자바교육,구...
 
안드로이드 데이터 바인딩
안드로이드 데이터 바인딩안드로이드 데이터 바인딩
안드로이드 데이터 바인딩
 
Under the Hood: Using Spring in Grails
Under the Hood: Using Spring in GrailsUnder the Hood: Using Spring in Grails
Under the Hood: Using Spring in Grails
 
JavaFX 2 and Scala - Like Milk and Cookies (33rd Degrees)
JavaFX 2 and Scala - Like Milk and Cookies (33rd Degrees)JavaFX 2 and Scala - Like Milk and Cookies (33rd Degrees)
JavaFX 2 and Scala - Like Milk and Cookies (33rd Degrees)
 
Maximize the power of OSGi
Maximize the power of OSGiMaximize the power of OSGi
Maximize the power of OSGi
 
iOS Behavior-Driven Development
iOS Behavior-Driven DevelopmentiOS Behavior-Driven Development
iOS Behavior-Driven Development
 
CDI e as ideias pro futuro do VRaptor
CDI e as ideias pro futuro do VRaptorCDI e as ideias pro futuro do VRaptor
CDI e as ideias pro futuro do VRaptor
 
Test-driven Development with AEM
Test-driven Development with AEMTest-driven Development with AEM
Test-driven Development with AEM
 
Java Libraries You Can’t Afford to Miss
Java Libraries You Can’t Afford to MissJava Libraries You Can’t Afford to Miss
Java Libraries You Can’t Afford to Miss
 
Spring 4 - A&BP CC
Spring 4 - A&BP CCSpring 4 - A&BP CC
Spring 4 - A&BP CC
 
Unit Testing at Scale
Unit Testing at ScaleUnit Testing at Scale
Unit Testing at Scale
 
Apple Templates Considered Harmful
Apple Templates Considered HarmfulApple Templates Considered Harmful
Apple Templates Considered Harmful
 
JavaFX and Scala in the Cloud
JavaFX and Scala in the CloudJavaFX and Scala in the Cloud
JavaFX and Scala in the Cloud
 
Automated%20testing%20with%20Espresso2.x
Automated%20testing%20with%20Espresso2.xAutomated%20testing%20with%20Espresso2.x
Automated%20testing%20with%20Espresso2.x
 
Arquillian in a nutshell
Arquillian in a nutshellArquillian in a nutshell
Arquillian in a nutshell
 
Junit 5 - Maior e melhor
Junit 5 - Maior e melhorJunit 5 - Maior e melhor
Junit 5 - Maior e melhor
 
Vert.x - Reactive & Distributed [Devoxx version]
Vert.x - Reactive & Distributed [Devoxx version]Vert.x - Reactive & Distributed [Devoxx version]
Vert.x - Reactive & Distributed [Devoxx version]
 
Ow2 Utilities, OW2con'12, Paris
Ow2 Utilities, OW2con'12, ParisOw2 Utilities, OW2con'12, Paris
Ow2 Utilities, OW2con'12, Paris
 
12 hibernate int&cache
12  hibernate int&cache12  hibernate int&cache
12 hibernate int&cache
 

Similar to JavaFX for Business Application Developers

DataFX - JavaOne 2013
DataFX - JavaOne 2013DataFX - JavaOne 2013
DataFX - JavaOne 2013
Hendrik Ebbers
 
react-slides.pptx
react-slides.pptxreact-slides.pptx
react-slides.pptx
DayNightGaMiNg
 
react-slides.pdf
react-slides.pdfreact-slides.pdf
react-slides.pdf
DayNightGaMiNg
 
react-slides.pdf gives information about react library
react-slides.pdf gives information about react libraryreact-slides.pdf gives information about react library
react-slides.pdf gives information about react library
janet736113
 
Inversion of Control and Dependency Injection
Inversion of Control and Dependency InjectionInversion of Control and Dependency Injection
Inversion of Control and Dependency Injection
Dinesh Sharma
 
Jetpack, with new features in 2021 GDG Georgetown IO Extended
Jetpack, with new features in 2021 GDG Georgetown IO ExtendedJetpack, with new features in 2021 GDG Georgetown IO Extended
Jetpack, with new features in 2021 GDG Georgetown IO Extended
Toru Wonyoung Choi
 
vJUG - The JavaFX Ecosystem
vJUG - The JavaFX EcosystemvJUG - The JavaFX Ecosystem
vJUG - The JavaFX Ecosystem
Andres Almiray
 
Effective JavaFX architecture with FxObjects
Effective JavaFX architecture with FxObjectsEffective JavaFX architecture with FxObjects
Effective JavaFX architecture with FxObjects
Srikanth Shenoy
 
Getting Started with React v16
Getting Started with React v16Getting Started with React v16
Getting Started with React v16
Benny Neugebauer
 
Gilt Groupe's Selenium 2 Conversion Challenges
Gilt Groupe's Selenium 2 Conversion ChallengesGilt Groupe's Selenium 2 Conversion Challenges
Gilt Groupe's Selenium 2 Conversion Challenges
Sauce Labs
 
Java EE 6 CDI Integrates with Spring & JSF
Java EE 6 CDI Integrates with Spring & JSFJava EE 6 CDI Integrates with Spring & JSF
Java EE 6 CDI Integrates with Spring & JSF
Jiayun Zhou
 
Eclipse MicroProfile: Accelerating the adoption of Java Microservices
Eclipse MicroProfile: Accelerating the adoption of Java MicroservicesEclipse MicroProfile: Accelerating the adoption of Java Microservices
Eclipse MicroProfile: Accelerating the adoption of Java Microservices
Dev_Events
 
DataFX 8 (JavaOne 2014)
DataFX 8 (JavaOne 2014)DataFX 8 (JavaOne 2014)
DataFX 8 (JavaOne 2014)
Hendrik Ebbers
 
Javascript tdd byandreapaciolla
Javascript tdd byandreapaciollaJavascript tdd byandreapaciolla
Javascript tdd byandreapaciolla
Andrea Paciolla
 
Easy Java Integration Testing with Testcontainers​
Easy Java Integration Testing with Testcontainers​Easy Java Integration Testing with Testcontainers​
Easy Java Integration Testing with Testcontainers​
Payara
 
Industrial Strength Groovy - Tools for the Professional Groovy Developer: Pau...
Industrial Strength Groovy - Tools for the Professional Groovy Developer: Pau...Industrial Strength Groovy - Tools for the Professional Groovy Developer: Pau...
Industrial Strength Groovy - Tools for the Professional Groovy Developer: Pau...
Paul King
 
5.node js
5.node js5.node js
5.node js
Geunhyung Kim
 
比XML更好用的Java Annotation
比XML更好用的Java Annotation比XML更好用的Java Annotation
比XML更好用的Java Annotation
javatwo2011
 
Devoxx UK 2013 Test-Driven Development with JavaEE 7, Arquillian and Embedded...
Devoxx UK 2013 Test-Driven Development with JavaEE 7, Arquillian and Embedded...Devoxx UK 2013 Test-Driven Development with JavaEE 7, Arquillian and Embedded...
Devoxx UK 2013 Test-Driven Development with JavaEE 7, Arquillian and Embedded...
Peter Pilgrim
 
What's new and noteworthy in Java EE 8?
What's new and noteworthy in Java EE 8?What's new and noteworthy in Java EE 8?
What's new and noteworthy in Java EE 8?
gedoplan
 

Similar to JavaFX for Business Application Developers (20)

DataFX - JavaOne 2013
DataFX - JavaOne 2013DataFX - JavaOne 2013
DataFX - JavaOne 2013
 
react-slides.pptx
react-slides.pptxreact-slides.pptx
react-slides.pptx
 
react-slides.pdf
react-slides.pdfreact-slides.pdf
react-slides.pdf
 
react-slides.pdf gives information about react library
react-slides.pdf gives information about react libraryreact-slides.pdf gives information about react library
react-slides.pdf gives information about react library
 
Inversion of Control and Dependency Injection
Inversion of Control and Dependency InjectionInversion of Control and Dependency Injection
Inversion of Control and Dependency Injection
 
Jetpack, with new features in 2021 GDG Georgetown IO Extended
Jetpack, with new features in 2021 GDG Georgetown IO ExtendedJetpack, with new features in 2021 GDG Georgetown IO Extended
Jetpack, with new features in 2021 GDG Georgetown IO Extended
 
vJUG - The JavaFX Ecosystem
vJUG - The JavaFX EcosystemvJUG - The JavaFX Ecosystem
vJUG - The JavaFX Ecosystem
 
Effective JavaFX architecture with FxObjects
Effective JavaFX architecture with FxObjectsEffective JavaFX architecture with FxObjects
Effective JavaFX architecture with FxObjects
 
Getting Started with React v16
Getting Started with React v16Getting Started with React v16
Getting Started with React v16
 
Gilt Groupe's Selenium 2 Conversion Challenges
Gilt Groupe's Selenium 2 Conversion ChallengesGilt Groupe's Selenium 2 Conversion Challenges
Gilt Groupe's Selenium 2 Conversion Challenges
 
Java EE 6 CDI Integrates with Spring & JSF
Java EE 6 CDI Integrates with Spring & JSFJava EE 6 CDI Integrates with Spring & JSF
Java EE 6 CDI Integrates with Spring & JSF
 
Eclipse MicroProfile: Accelerating the adoption of Java Microservices
Eclipse MicroProfile: Accelerating the adoption of Java MicroservicesEclipse MicroProfile: Accelerating the adoption of Java Microservices
Eclipse MicroProfile: Accelerating the adoption of Java Microservices
 
DataFX 8 (JavaOne 2014)
DataFX 8 (JavaOne 2014)DataFX 8 (JavaOne 2014)
DataFX 8 (JavaOne 2014)
 
Javascript tdd byandreapaciolla
Javascript tdd byandreapaciollaJavascript tdd byandreapaciolla
Javascript tdd byandreapaciolla
 
Easy Java Integration Testing with Testcontainers​
Easy Java Integration Testing with Testcontainers​Easy Java Integration Testing with Testcontainers​
Easy Java Integration Testing with Testcontainers​
 
Industrial Strength Groovy - Tools for the Professional Groovy Developer: Pau...
Industrial Strength Groovy - Tools for the Professional Groovy Developer: Pau...Industrial Strength Groovy - Tools for the Professional Groovy Developer: Pau...
Industrial Strength Groovy - Tools for the Professional Groovy Developer: Pau...
 
5.node js
5.node js5.node js
5.node js
 
比XML更好用的Java Annotation
比XML更好用的Java Annotation比XML更好用的Java Annotation
比XML更好用的Java Annotation
 
Devoxx UK 2013 Test-Driven Development with JavaEE 7, Arquillian and Embedded...
Devoxx UK 2013 Test-Driven Development with JavaEE 7, Arquillian and Embedded...Devoxx UK 2013 Test-Driven Development with JavaEE 7, Arquillian and Embedded...
Devoxx UK 2013 Test-Driven Development with JavaEE 7, Arquillian and Embedded...
 
What's new and noteworthy in Java EE 8?
What's new and noteworthy in Java EE 8?What's new and noteworthy in Java EE 8?
What's new and noteworthy in Java EE 8?
 

Recently uploaded

Serial Arm Control in Real Time Presentation
Serial Arm Control in Real Time PresentationSerial Arm Control in Real Time Presentation
Serial Arm Control in Real Time Presentation
tolgahangng
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
Daiki Mogmet Ito
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
danishmna97
 
Building Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and MilvusBuilding Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and Milvus
Zilliz
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
Alpen-Adria-Universität
 
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial IntelligenceAI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
IndexBug
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
Kumud Singh
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
Neo4j
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
Kari Kakkonen
 
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with SlackLet's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
shyamraj55
 
Infrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI modelsInfrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI models
Zilliz
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
SOFTTECHHUB
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
Safe Software
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
Uni Systems S.M.S.A.
 
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
Neo4j
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
Neo4j
 
GraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracyGraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracy
Tomaz Bratanic
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
Zilliz
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
innovationoecd
 
GenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizationsGenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizations
kumardaparthi1024
 

Recently uploaded (20)

Serial Arm Control in Real Time Presentation
Serial Arm Control in Real Time PresentationSerial Arm Control in Real Time Presentation
Serial Arm Control in Real Time Presentation
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
 
Building Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and MilvusBuilding Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and Milvus
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
 
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial IntelligenceAI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
 
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with SlackLet's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
 
Infrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI modelsInfrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI models
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
 
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
 
GraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracyGraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracy
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
 
GenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizationsGenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizations
 

JavaFX for Business Application Developers

  • 1. JavaFX for Business Application Developers Michael Heinrichs Montag, 8. Oktober 2012
  • 2. “Coo k kodo ing Eggs” mut ( b CC B y Y 2.0 ) “charles bridge” by hodgers (CC BY-SA 2.0) Montag, 8. Oktober 2012
  • 3. The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle. Montag, 8. Oktober 2012
  • 4. • Sample Application • Process Overview • Defining the View • Data Binding • Styling with CSS Montag, 8. Oktober 2012
  • 7. Just A J Another C Conference P Planner Montag, 8. Oktober 2012
  • 9. Java EE JavaDB RESTful WS Jersey JavaFX UI Montag, 8. Oktober 2012
  • 11. UX Designer Montag, 8. Oktober 2012
  • 12. UX Developer Designer Montag, 8. Oktober 2012
  • 13. UX Developer Designer package com.oracle.conferenceplanner.controller; import com.oracle.conferenceplanner.Env; import com.oracle.conferenceplanner.Messages; import com.oracle.conferenceplanner.entities.Session; import com.oracle.conferenceplanner.entities.Speaker; import com.oracle.conferenceplanner.view.GenericListCell; import com.sun.javafx.util.MessageBus; import java.net.URL; import java.util.Collection; import java.util.ResourceBundle; import javafx.animation.Animation; import javafx.animation.PauseTransitionBuilder; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.concurrent.Service; import javafx.concurrent.Task; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.*; import javafx.scene.input.KeyEvent; import javafx.util.Callback; import javafx.util.Duration; /** * * @author Michael Heinrichs */ public class MainScreen implements Initializable { @FXML private TextField searchField; @FXML private ToggleGroup toggleSearch; @FXML private Toggle toggleSession; @FXML private ProgressIndicator progressIndicator; @FXML private ListView searchResultList; private final Service<Collection<?>> dataFetcher = new Service<Collection<?>>() { @Override protected Task<Collection<?>> createTask() { final String currentSearchString = searchField.getText(); final boolean getSessions = toggleSearch.getSelectedToggle().equals(toggleSession); return new Task<Collection<?>>() { @Override protected Collection<?> call() throws Exception { return getSessions? Session.findLike(Env.getInstance ().getWebResource(), currentSearchString) : Speaker.findLike(Env.getInstance ().getWebResource(), currentSearchString); } }; } @Override Montag, 8. Oktober 2012
  • 14. UX Graphical Developer Designer Designer package com.oracle.conferenceplanner.controller; import com.oracle.conferenceplanner.Env; import com.oracle.conferenceplanner.Messages; import com.oracle.conferenceplanner.entities.Session; import com.oracle.conferenceplanner.entities.Speaker; import com.oracle.conferenceplanner.view.GenericListCell; import com.sun.javafx.util.MessageBus; import java.net.URL; import java.util.Collection; import java.util.ResourceBundle; import javafx.animation.Animation; import javafx.animation.PauseTransitionBuilder; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.concurrent.Service; import javafx.concurrent.Task; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.*; import javafx.scene.input.KeyEvent; import javafx.util.Callback; import javafx.util.Duration; /** * * @author Michael Heinrichs */ public class MainScreen implements Initializable { @FXML private TextField searchField; @FXML private ToggleGroup toggleSearch; @FXML private Toggle toggleSession; @FXML private ProgressIndicator progressIndicator; @FXML private ListView searchResultList; private final Service<Collection<?>> dataFetcher = new Service<Collection<?>>() { @Override protected Task<Collection<?>> createTask() { final String currentSearchString = searchField.getText(); final boolean getSessions = toggleSearch.getSelectedToggle().equals(toggleSession); return new Task<Collection<?>>() { @Override protected Collection<?> call() throws Exception { return getSessions? Session.findLike(Env.getInstance ().getWebResource(), currentSearchString) : Speaker.findLike(Env.getInstance ().getWebResource(), currentSearchString); } }; } @Override Montag, 8. Oktober 2012
  • 15. Graphical Developer Designer package com.oracle.conferenceplanner.controller; import com.oracle.conferenceplanner.Env; import com.oracle.conferenceplanner.Messages; import com.oracle.conferenceplanner.entities.Session; import com.oracle.conferenceplanner.entities.Speaker; import com.oracle.conferenceplanner.view.GenericListCell; import com.sun.javafx.util.MessageBus; import java.net.URL; import java.util.Collection; import java.util.ResourceBundle; import javafx.animation.Animation; import javafx.animation.PauseTransitionBuilder; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.concurrent.Service; import javafx.concurrent.Task; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.*; import javafx.scene.input.KeyEvent; import javafx.util.Callback; import javafx.util.Duration; /** * * @author Michael Heinrichs */ public class MainScreen implements Initializable { @FXML private TextField searchField; @FXML private ToggleGroup toggleSearch; @FXML private Toggle toggleSession; @FXML private ProgressIndicator progressIndicator; @FXML private ListView searchResultList; private final Service<Collection<?>> dataFetcher = new Service<Collection<?>>() { @Override protected Task<Collection<?>> createTask() { final String currentSearchString = searchField.getText(); final boolean getSessions = toggleSearch.getSelectedToggle().equals(toggleSession); return new Task<Collection<?>>() { @Override protected Collection<?> call() throws Exception { return getSessions? Session.findLike(Env.getInstance ().getWebResource(), currentSearchString) : Speaker.findLike(Env.getInstance ().getWebResource(), currentSearchString); } }; } @Override Montag, 8. Oktober 2012
  • 16. Developer package com.oracle.conferenceplanner.controller; import com.oracle.conferenceplanner.Env; import com.oracle.conferenceplanner.Messages; import com.oracle.conferenceplanner.entities.Session; import com.oracle.conferenceplanner.entities.Speaker; import com.oracle.conferenceplanner.view.GenericListCell; import com.sun.javafx.util.MessageBus; import java.net.URL; import java.util.Collection; import java.util.ResourceBundle; import javafx.animation.Animation; import javafx.animation.PauseTransitionBuilder; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.concurrent.Service; import javafx.concurrent.Task; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.*; import javafx.scene.input.KeyEvent; import javafx.util.Callback; import javafx.util.Duration; /** * * @author Michael Heinrichs */ public class MainScreen implements Initializable { @FXML private TextField searchField; @FXML private ToggleGroup toggleSearch; @FXML private Toggle toggleSession; @FXML private ProgressIndicator progressIndicator; @FXML private ListView searchResultList; private final Service<Collection<?>> dataFetcher = new Service<Collection<?>>() { @Override protected Task<Collection<?>> createTask() { final String currentSearchString = searchField.getText(); final boolean getSessions = toggleSearch.getSelectedToggle().equals(toggleSession); return new Task<Collection<?>>() { @Override protected Collection<?> call() throws Exception { return getSessions? Session.findLike(Env.getInstance ().getWebResource(), currentSearchString) : Speaker.findLike(Env.getInstance ().getWebResource(), currentSearchString); } }; } @Override Montag, 8. Oktober 2012
  • 17. UX Graphical Developer Designer Designer package com.oracle.conferenceplanner.controller; import com.oracle.conferenceplanner.Env; import com.oracle.conferenceplanner.Messages; import com.oracle.conferenceplanner.entities.Session; import com.oracle.conferenceplanner.entities.Speaker; import com.oracle.conferenceplanner.view.GenericListCell; import com.sun.javafx.util.MessageBus; import java.net.URL; import java.util.Collection; import java.util.ResourceBundle; import javafx.animation.Animation; import javafx.animation.PauseTransitionBuilder; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.concurrent.Service; import javafx.concurrent.Task; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.*; import javafx.scene.input.KeyEvent; import javafx.util.Callback; import javafx.util.Duration; /** * * @author Michael Heinrichs */ public class MainScreen implements Initializable { @FXML private TextField searchField; @FXML private ToggleGroup toggleSearch; @FXML private Toggle toggleSession; @FXML private ProgressIndicator progressIndicator; @FXML private ListView searchResultList; private final Service<Collection<?>> dataFetcher = new Service<Collection<?>>() { @Override protected Task<Collection<?>> createTask() { final String currentSearchString = searchField.getText(); final boolean getSessions = toggleSearch.getSelectedToggle().equals(toggleSession); return new Task<Collection<?>>() { @Override protected Collection<?> call() throws Exception { return getSessions? Session.findLike(Env.getInstance ().getWebResource(), currentSearchString) : Speaker.findLike(Env.getInstance ().getWebResource(), currentSearchString); } }; } @Override Montag, 8. Oktober 2012
  • 18. UX Graphical Developer Designer Designer <?xml version="1.0" encoding="UTF-8"?> package com.oracle.conferenceplanner.controller; <?import com.oracle.conferenceplanner.view.*?> import com.oracle.conferenceplanner.Env; <?import java.lang.*?> import com.oracle.conferenceplanner.Messages; <?import java.util.*?> import com.oracle.conferenceplanner.entities.Session; <?import javafx.geometry.*?> import com.oracle.conferenceplanner.entities.Speaker; <?import javafx.scene.control.*?> import com.oracle.conferenceplanner.view.GenericListCell; <?import javafx.scene.layout.*?> import com.sun.javafx.util.MessageBus; <?import javafx.scene.paint.*?> import java.net.URL; <?import javafx.scene.shape.*?> import java.util.Collection; import java.util.ResourceBundle; <SplitPane dividerPositions="0.3" focusTraversable="true" import javafx.animation.Animation; xmlns:fx="http://javafx.com/fxml" import javafx.animation.PauseTransitionBuilder; fx:controller="com.oracle.conferenceplanner.controller.MainScreen"> import javafx.beans.value.ChangeListener; <items> import javafx.beans.value.ObservableValue; <AnchorPane> import javafx.concurrent.Service; <children> import javafx.concurrent.Task; <VBox spacing="10.0" AnchorPane.bottomAnchor="0.0" import javafx.event.ActionEvent; AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" import javafx.event.EventHandler; AnchorPane.topAnchor="0.0"> import javafx.fxml.FXML; <children> import javafx.fxml.Initializable; <TextField fx:id="searchField" minHeight="-Infinity" import javafx.scene.control.*; onKeyTyped="#handleSearchBoxTyped" promptText="Search" /> import javafx.scene.input.KeyEvent; <HBox spacing="10.0"> import javafx.util.Callback; <children> import javafx.util.Duration; <ToggleButton fx:id="toggleSession" selected="true" text="Session"> /** <toggleGroup> * <ToggleGroup fx:id="toggleSearch" /> * @author Michael Heinrichs </toggleGroup> */ </ToggleButton> public class MainScreen implements Initializable { <ToggleButton fx:id="toggleSpeaker" text="Speaker" toggleGroup="$toggleSearch" /> @FXML private TextField searchField; </children> @FXML private ToggleGroup toggleSearch; </HBox> @FXML private Toggle toggleSession; <StackPane VBox.vgrow="ALWAYS"> @FXML private ProgressIndicator progressIndicator; <children> @FXML private ListView searchResultList; <ListView fx:id="searchResultList" /> <ProgressIndicator fx:id="progressIndicator" private final Service<Collection<?>> dataFetcher = new maxHeight="-Infinity" maxWidth="-Infinity" visible="false" /> Service<Collection<?>>() { </children> @Override </StackPane> protected Task<Collection<?>> createTask() { </children> final String currentSearchString = searchField.getText(); </VBox> final boolean getSessions = </children> toggleSearch.getSelectedToggle().equals(toggleSession); <padding> return new Task<Collection<?>>() { <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /> @Override </padding> protected Collection<?> call() throws Exception { </AnchorPane> return getSessions? <AnchorPane> Session.findLike(Env.getInstance <children> ().getWebResource(), currentSearchString) <StackPane fx:id="detailsPane" AnchorPane.bottomAnchor="0.0" : Speaker.findLike(Env.getInstance AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" ().getWebResource(), currentSearchString); AnchorPane.topAnchor="0.0"> } <children> }; <fx:include source="session_details.fxml"/> } <fx:include source="speaker_details.fxml"/> </children> @Override Montag, 8. Oktober 2012
  • 19. UX Graphical Developer Designer Designer <?xml version="1.0" encoding="UTF-8"?> package com.oracle.conferenceplanner.controller; .root { <?import com.oracle.conferenceplanner.view.*?> import com.oracle.conferenceplanner.Env; -fx-background-color: black; <?import java.lang.*?> import com.oracle.conferenceplanner.Messages; -fx-font-family: 'Impact'; <?import java.util.*?> import com.oracle.conferenceplanner.entities.Session; /* -fx-font-fill: #99C0D0;*/ <?import javafx.geometry.*?> import com.oracle.conferenceplanner.entities.Speaker; -fx-font-fill: black; <?import javafx.scene.control.*?> import com.oracle.conferenceplanner.view.GenericListCell; } <?import javafx.scene.layout.*?> import com.sun.javafx.util.MessageBus; .label { <?import javafx.scene.paint.*?> import java.net.URL; -fx-text-fill: #7C5FDD; <?import javafx.scene.shape.*?> import java.util.Collection; } import java.util.ResourceBundle; .text-area { <SplitPane dividerPositions="0.3" focusTraversable="true" import javafx.animation.Animation; -fx-text-fill: #7C5FDD; xmlns:fx="http://javafx.com/fxml" import javafx.animation.PauseTransitionBuilder; } fx:controller="com.oracle.conferenceplanner.controller.MainScreen"> import javafx.beans.value.ChangeListener; .text-field { <items> import javafx.beans.value.ObservableValue; -fx-background-color: transparent; <AnchorPane> import javafx.concurrent.Service; -fx-border-color: #7C5FDD; <children> import javafx.concurrent.Task; -fx-text-fill: #D99C10; <VBox spacing="10.0" AnchorPane.bottomAnchor="0.0" import javafx.event.ActionEvent; -fx-prompt-text-fill: #7C5FDD; AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" import javafx.event.EventHandler; -fx-cursor: text; AnchorPane.topAnchor="0.0"> import javafx.fxml.FXML; } <children> import javafx.fxml.Initializable; <TextField fx:id="searchField" minHeight="-Infinity" import javafx.scene.control.*; .toggle-button { onKeyTyped="#handleSearchBoxTyped" promptText="Search" /> import javafx.scene.input.KeyEvent; -fx-background-color: #7C5FDD; <HBox spacing="10.0"> import javafx.util.Callback; -fx-background-radius: 0; <children> import javafx.util.Duration; -fx-text-fill: black; <ToggleButton fx:id="toggleSession" selected="true" -fx-alignment: CENTER; text="Session"> /** -fx-content-display: LEFT; <toggleGroup> * } <ToggleGroup fx:id="toggleSearch" /> * @author Michael Heinrichs </toggleGroup> */ .toggle-button:selected { </ToggleButton> public class MainScreen implements Initializable { -fx-background-color: #D99C10; <ToggleButton fx:id="toggleSpeaker" text="Speaker" } toggleGroup="$toggleSearch" /> @FXML private TextField searchField; </children> @FXML private ToggleGroup toggleSearch; .list-view { </HBox> @FXML private Toggle toggleSession; -fx-background-color: transparent; <StackPane VBox.vgrow="ALWAYS"> @FXML private ProgressIndicator progressIndicator; } <children> @FXML private ListView searchResultList; <ListView fx:id="searchResultList" /> .list-view:vertical .list-cell { <ProgressIndicator fx:id="progressIndicator" private final Service<Collection<?>> dataFetcher = new -fx-background-insets: 0, 5 0, 10 15, 0 25; maxHeight="-Infinity" maxWidth="-Infinity" visible="false" /> Service<Collection<?>>() { -fx-padding: 15 20; </children> @Override } </StackPane> protected Task<Collection<?>> createTask() { </children> final String currentSearchString = searchField.getText(); .list-view:horizontal .list-cell { </VBox> final boolean getSessions = -fx-background-insets: 0, 0 5, 5 20, 0 30; </children> toggleSearch.getSelectedToggle().equals(toggleSession); -fx-padding: 10 25; <padding> return new Task<Collection<?>>() { } <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /> @Override </padding> protected Collection<?> call() throws Exception { .list-cell { </AnchorPane> return getSessions? -fx-background-color: black, #7C5FDD, black, black; <AnchorPane> Session.findLike(Env.getInstance -fx-background-radius: 0, 10, 5, 0; <children> ().getWebResource(), currentSearchString) } <StackPane fx:id="detailsPane" AnchorPane.bottomAnchor="0.0" : Speaker.findLike(Env.getInstance AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" ().getWebResource(), currentSearchString); .list-cell .label { AnchorPane.topAnchor="0.0"> } -fx-text-fill: #7C5FDD; <children> }; } <fx:include source="session_details.fxml"/> } <fx:include source="speaker_details.fxml"/> .list-cell .title { </children> @Override -fx-text-fill: #D99C10; Montag, 8. Oktober 2012
  • 20. Developer package com.oracle.conferenceplanner.controller; import com.oracle.conferenceplanner.Env; import com.oracle.conferenceplanner.Messages; import com.oracle.conferenceplanner.entities.Session; import com.oracle.conferenceplanner.entities.Speaker; import com.oracle.conferenceplanner.view.GenericListCell; import com.sun.javafx.util.MessageBus; import java.net.URL; import java.util.Collection; import java.util.ResourceBundle; import javafx.animation.Animation; import javafx.animation.PauseTransitionBuilder; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.concurrent.Service; import javafx.concurrent.Task; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.*; .root { import javafx.scene.input.KeyEvent; -fx-background-color: black; import javafx.util.Callback; -fx-font-family: 'Impact'; import javafx.util.Duration; /* -fx-font-fill: #99C0D0;*/ -fx-font-fill: black; /** } <?xml version="1.0" encoding="UTF-8"?> * .label { * @author Michael Heinrichs -fx-text-fill: #7C5FDD; <?import com.oracle.conferenceplanner.view.*?> */ } <?import java.lang.*?> public class MainScreen implements Initializable { { .text-area <?import java.util.*?> -fx-text-fill: #7C5FDD; <?import javafx.geometry.*?> @FXML private TextField searchField; } <?import javafx.scene.control.*?> .text-field { @FXML private ToggleGroup toggleSearch; <?import javafx.scene.layout.*?> @FXML private Toggle toggleSession; -fx-background-color: transparent; <?import javafx.scene.paint.*?> -fx-border-color: #7C5FDD; @FXML private ProgressIndicator progressIndicator; <?import javafx.scene.shape.*?> @FXML private ListView searchResultList; -fx-text-fill: #D99C10; -fx-prompt-text-fill: #7C5FDD; <SplitPane dividerPositions="0.3" focusTraversable="true" -fx-cursor: text; private final Service<Collection<?>> dataFetcher = new xmlns:fx="http://javafx.com/fxml" Service<Collection<?>>() { } fx:controller="com.oracle.conferenceplanner.controller.MainScreen"> @Override <items> .toggle-button { protected Task<Collection<?>> createTask() { <AnchorPane> -fx-background-color: #7C5FDD; final String currentSearchString = searchField.getText(); <children> final boolean getSessions = -fx-background-radius: 0; <VBox spacing="10.0" AnchorPane.bottomAnchor="0.0" -fx-text-fill: black; toggleSearch.getSelectedToggle().equals(toggleSession); AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" -fx-alignment: CENTER; return new Task<Collection<?>>() { AnchorPane.topAnchor="0.0"> @Override -fx-content-display: LEFT; <children> protected Collection<?> }call() throws Exception { <TextField fx:id="searchField" minHeight="-Infinity" return getSessions? onKeyTyped="#handleSearchBoxTyped" promptText="Search" /> .toggle-button:selected { Session.findLike(Env.getInstance <HBox spacing="10.0"> ().getWebResource(), currentSearchString) -fx-background-color: #D99C10; <children> } : Speaker.findLike(Env.getInstance <ToggleButton fx:id="toggleSession" selected="true" ().getWebResource(), currentSearchString); text="Session"> } .list-view { <toggleGroup> }; -fx-background-color: transparent; <ToggleGroup fx:id="toggleSearch" /> } } </toggleGroup> </ToggleButton> @Override .list-view:vertical .list-cell { <ToggleButton fx:id="toggleSpeaker" text="Speaker" -fx-background-insets: 0, 5 0, 10 15, 0 25; toggleGroup="$toggleSearch" /> -fx-padding: 15 20; </children> } </HBox> <StackPane VBox.vgrow="ALWAYS"> .list-view:horizontal .list-cell { <children> -fx-background-insets: 0, 0 5, 5 20, 0 30; <ListView fx:id="searchResultList" /> -fx-padding: 10 25; <ProgressIndicator fx:id="progressIndicator" } maxHeight="-Infinity" maxWidth="-Infinity" visible="false" /> </children> .list-cell { </StackPane> -fx-background-color: black, #7C5FDD, black, black; </children> -fx-background-radius: 0, 10, 5, 0; </VBox> } </children> <padding> .list-cell .label { <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /> -fx-text-fill: #7C5FDD; </padding> } </AnchorPane> <AnchorPane> .list-cell .title { <children> -fx-text-fill: #D99C10; <StackPane fx:id="detailsPane" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> <children> <fx:include source="session_details.fxml"/> <fx:include source="speaker_details.fxml"/> </children> UX Graphical JavaFX Designer Designer Montag, 8. Oktober 2012
  • 21. Defining the view Montag, 8. Oktober 2012
  • 23. Stage Scene Scenegraph Montag, 8. Oktober 2012
  • 24. JFrame Name JFXPanel : JComponent Adress Scene Mail Scenegraph OK Cancel Montag, 8. Oktober 2012
  • 36. Top Left Center Right Bottom Montag, 8. Oktober 2012
  • 42. •child.setLayoutX(10); •vBox.setAlignment(Pos.CENTER); •VBox.setMargin(child, new Insets(10)); Montag, 8. Oktober 2012
  • 43. Data Binding Montag, 8. Oktober 2012
  • 44. Java EE JavaDB RESTful WS Jersey JavaFX UI Montag, 8. Oktober 2012
  • 47. Styling with CSS Montag, 8. Oktober 2012
  • 56. UX Graphical Developer Designer Designer package com.oracle.conferenceplanner.controller; import com.oracle.conferenceplanner.Env; import com.oracle.conferenceplanner.Messages; import com.oracle.conferenceplanner.entities.Session; import com.oracle.conferenceplanner.entities.Speaker; import com.oracle.conferenceplanner.view.GenericListCell; import com.sun.javafx.util.MessageBus; import java.net.URL; import java.util.Collection; import java.util.ResourceBundle; import javafx.animation.Animation; import javafx.animation.PauseTransitionBuilder; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.concurrent.Service; import javafx.concurrent.Task; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.*; import javafx.scene.input.KeyEvent; import javafx.util.Callback; import javafx.util.Duration; /** * * @author Michael Heinrichs */ public class MainScreen implements Initializable { @FXML private TextField searchField; @FXML private ToggleGroup toggleSearch; @FXML private Toggle toggleSession; @FXML private ProgressIndicator progressIndicator; @FXML private ListView searchResultList; private final Service<Collection<?>> dataFetcher = new Service<Collection<?>>() { @Override protected Task<Collection<?>> createTask() { final String currentSearchString = searchField.getText(); final boolean getSessions = toggleSearch.getSelectedToggle().equals(toggleSession); return new Task<Collection<?>>() { @Override protected Collection<?> call() throws Exception { return getSessions? Session.findLike(Env.getInstance ().getWebResource(), currentSearchString) : Speaker.findLike(Env.getInstance ().getWebResource(), currentSearchString); } }; } @Override Montag, 8. Oktober 2012
  • 57. Developer package com.oracle.conferenceplanner.controller; import com.oracle.conferenceplanner.Env; import com.oracle.conferenceplanner.Messages; import com.oracle.conferenceplanner.entities.Session; import com.oracle.conferenceplanner.entities.Speaker; import com.oracle.conferenceplanner.view.GenericListCell; import com.sun.javafx.util.MessageBus; import java.net.URL; import java.util.Collection; import java.util.ResourceBundle; import javafx.animation.Animation; import javafx.animation.PauseTransitionBuilder; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.concurrent.Service; import javafx.concurrent.Task; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.*; .root { import javafx.scene.input.KeyEvent; -fx-background-color: black; import javafx.util.Callback; -fx-font-family: 'Impact'; import javafx.util.Duration; /* -fx-font-fill: #99C0D0;*/ -fx-font-fill: black; /** } <?xml version="1.0" encoding="UTF-8"?> * .label { * @author Michael Heinrichs -fx-text-fill: #7C5FDD; <?import com.oracle.conferenceplanner.view.*?> */ } <?import java.lang.*?> public class MainScreen implements Initializable { { .text-area <?import java.util.*?> -fx-text-fill: #7C5FDD; <?import javafx.geometry.*?> @FXML private TextField searchField; } <?import javafx.scene.control.*?> .text-field { @FXML private ToggleGroup toggleSearch; <?import javafx.scene.layout.*?> @FXML private Toggle toggleSession; -fx-background-color: transparent; <?import javafx.scene.paint.*?> -fx-border-color: #7C5FDD; @FXML private ProgressIndicator progressIndicator; <?import javafx.scene.shape.*?> @FXML private ListView searchResultList; -fx-text-fill: #D99C10; -fx-prompt-text-fill: #7C5FDD; <SplitPane dividerPositions="0.3" focusTraversable="true" -fx-cursor: text; private final Service<Collection<?>> dataFetcher = new xmlns:fx="http://javafx.com/fxml" Service<Collection<?>>() { } fx:controller="com.oracle.conferenceplanner.controller.MainScreen"> @Override <items> .toggle-button { protected Task<Collection<?>> createTask() { <AnchorPane> -fx-background-color: #7C5FDD; final String currentSearchString = searchField.getText(); <children> final boolean getSessions = -fx-background-radius: 0; <VBox spacing="10.0" AnchorPane.bottomAnchor="0.0" -fx-text-fill: black; toggleSearch.getSelectedToggle().equals(toggleSession); AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" -fx-alignment: CENTER; return new Task<Collection<?>>() { AnchorPane.topAnchor="0.0"> @Override -fx-content-display: LEFT; <children> protected Collection<?> }call() throws Exception { <TextField fx:id="searchField" minHeight="-Infinity" return getSessions? onKeyTyped="#handleSearchBoxTyped" promptText="Search" /> .toggle-button:selected { Session.findLike(Env.getInstance <HBox spacing="10.0"> ().getWebResource(), currentSearchString) -fx-background-color: #D99C10; <children> } : Speaker.findLike(Env.getInstance <ToggleButton fx:id="toggleSession" selected="true" ().getWebResource(), currentSearchString); text="Session"> } .list-view { <toggleGroup> }; -fx-background-color: transparent; <ToggleGroup fx:id="toggleSearch" /> } } </toggleGroup> </ToggleButton> @Override .list-view:vertical .list-cell { <ToggleButton fx:id="toggleSpeaker" text="Speaker" -fx-background-insets: 0, 5 0, 10 15, 0 25; toggleGroup="$toggleSearch" /> -fx-padding: 15 20; </children> } </HBox> <StackPane VBox.vgrow="ALWAYS"> .list-view:horizontal .list-cell { <children> -fx-background-insets: 0, 0 5, 5 20, 0 30; <ListView fx:id="searchResultList" /> -fx-padding: 10 25; <ProgressIndicator fx:id="progressIndicator" } maxHeight="-Infinity" maxWidth="-Infinity" visible="false" /> </children> .list-cell { </StackPane> -fx-background-color: black, #7C5FDD, black, black; </children> -fx-background-radius: 0, 10, 5, 0; </VBox> } </children> <padding> .list-cell .label { <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /> -fx-text-fill: #7C5FDD; </padding> } </AnchorPane> <AnchorPane> .list-cell .title { <children> -fx-text-fill: #D99C10; <StackPane fx:id="detailsPane" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> <children> <fx:include source="session_details.fxml"/> <fx:include source="speaker_details.fxml"/> </children> UX Graphical JavaFX Designer Designer Montag, 8. Oktober 2012
  • 58. • http://blog.netopyr.com @net0pyr • JavaFX Website http://javafx.com • OTN Forum http://forums.oracle.com • Bugs and Feature Requests http://javafx-jira.kenai.com • API Discussions openjfx-dev@openjdk.java.net Montag, 8. Oktober 2012
  • 60. Copyright © 2011, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8 Montag, 8. Oktober 2012