SlideShare una empresa de Scribd logo
1 de 150
JavaFX
Óliver Centeno Álvarez
Contenidos
 1.   ¿Qué es JavaFX?
 2.   Construcción de Formularios
 3.   SceneBuilder
 4.   Eventos, Controladores y Filtros
 5.   Estilos CSS
 6.   Contenido HTML
 7.   Aplicaciones Multipantalla
 8.   Threads
 9.   Empaquetado y Despliegue
10.   Gráficos y Multimedia
JavaFX
1. ¿Qué es JavaFX?
1. ¿Qué es JavaFX?
●   Chris Oliver @ SeeBeyond
●   F3 (Form Follows Function)
●   Comprada por Sun en 2007
●   1.0 JavaFX Script
    ○ Interpretado
    ○ Compilado (Elefante atravesando una puerta)
● 1.3 Oracle JavaFX (2010)
● 2.0 JavaFX API
● 2.2.7 Versión actual (2013)
1. ¿Qué es JavaFX?

●   Herramientas gráficas
●   Basadas en escenas
●   Multiplataforma
●   RIA
●   Runtime Específico
●   Desarrollo tipo Swing
1. ¿Qué es JavaFX?
● Instalación
  ○   JDK 1.7
  ○   JavaFX SDK 2.2
  ○   JavaFX SceneBuilder 1.0
  ○   NetBeans IDE 7.3
1. ¿Qué es JavaFX?
● Primer JavaFX

  1.   Abrir NetBeans
  2.   New Project
  3.   JavaFX Application
  4.   Configurar JavaFX SDK
  5.   Indicar un nombre de proyecto
  6.   Indicar un nombre de clase
  7.   Ejecutar el proyecto
1. ¿Qué es JavaFX?
● Un ejemplo más complejo

  1.   Crear un objeto Text
  2.   Cambiar el color con setFill()
  3.   Cambiar la fuente con setFont()
  4.   Añadirlo a la ventana (root)
  5.   Ejecutar el proyecto
  6.   Arreglar el aspecto (Group)
1. ¿Qué es JavaFX?
● Ejercicio 1

  ○   Crear múltiples textos
  ○   En posiciones aleatorias
  ○   Con colores aleatorios
  ○   Añadir rotación a los textos
1. ¿Qué es JavaFX?
● Efectos
  ○ Se pueden añadir sombras
    ■ DropShadow
    ■ InnerShadow
  ○ Brillos y Reflejos
    ■ Bloom
    ■ Glow
    ■ Reflection
  ○ Y otros efectos
    ■ javafx.scene.effect.*
    ■ setEffect()
1. ¿Qué es JavaFX?
● Caso Particular
  ○ Animaciones (javafx.animation)
  ○ Translate
    ■ Desplaza el texto
        ●   setNode()
        ●   setFromX(), setToX(), setByX()
     ■ Un periodo de tiempo
        ●   setDuration()
     ■ Con una aceleración
        ●   setInterpolator()
     ■ De manera cíclica
        ●   setCycleCount()
        ●   play()
1. ¿Qué es JavaFX?
● Ejercicio 2
  ○ Probar algunos efectos
  ○ Desenfocados
    ■ BoxBlur
    ■ GaussianBlur
    ■ MotionBlur
  ○ Con fuente de luz
    ■ Glow
    ■ Lighting
  ○ Otros
JavaFX
2. Creación de Formularios
2. Creación de Formularios
● El Objeto javafx.stage.Stage
  ○ Interfaz de una aplicación JavaFX
  ○ Independiente de dispositivo
  ○ Equivale a JFrame
     ■ setTitle()
     ■ show()
     ■ close()
     ■ centerOnScreen()
     ■ toBack()
     ■ toFront()
2. Creación de Formularios
● El Objeto javafx.stage.Stage
  ○ Owner
    ■ Ventana que contiene el stage
    ■ initOwner()
  ○ Modality
    ■ Especifica que la ventana sea modal
    ■ initModality()
  ○ StageStyle
    ■ Especifica el estilo de fondo de la ventana
    ■ initStyle()
2. Creación de Formularios
● El Objeto javafx.stage.Screen
  ○ Pantalla sobre la que se proyecta el Stage
  ○ Admite entornos multipantalla
    ■ getScreens()
    ■ getPrimary()
  ○ Permite consultar el tamaño
    ■ getBounds()
    ■ getVisualBounds()
  ○ Permite consultar la resolución
    ■ getDpi()
2. Creación de Formularios
● El Objeto javafx.scene.Scene
  ○ Elementos gráficos mostrados en el Stage
  ○ Permite indicar
    ■ Eventos
    ■ Cursor
    ■ Cámara
    ■ Mnemónicos
    ■ Css
    ■ etc
  ○ Permite capturar imágenes
  ○ Permite drag & drop
2. Creación de Formularios
● El Objeto javafx.scene.Scene
  ○ Modelo de árbol
  ○ Admite como raíz cualquier objeto javafx.scene.
    Node
    ■ Tipo Parent
        ●   Group
        ●   Region
     ■ Tipo Control
        ●   Tipo Contenedor
        ●   Tipo Componente
  ○ Caso particular: layouts (Paneles)
2. Creación de Formularios
● El Objeto javafx.scene.Group
  ○ Contiene otros controles ordenados
  ○ Propaga transformaciones, efectos y estados
  ○ SÍ posicionable, NO redimensionable
    ■ setLayoutX()
    ■ setAutoSizeChildren()
    ■ setRotation()
    ■ setStyle()
    ■ setScaleX()
    ■ setTranslateX()
    ■ ...
2. Creación de Formularios
● Ejercicio 3

  ○   Probar los estilos de un Stage
  ○   Crear una ventana transparente
  ○   Centrada en la pantalla
  ○   Comprobar los límites de la pantalla
  ○   Crear un grupo de controles
  ○   Aplicarle rotaciones, escalas y transformaciones
      (desde el grupo, claro)
2. Creación de Formularios
● Jerarquía de Controles

                          Node



    MediaView   Canvas    Parent           Shape           ImageView



                Control   Group            Region



                                   Chart            Pane
2. Creación de Formularios
● Controles
  ○ Controles básicos
     ■ javafx.scene.control.*
     ■ javafx.scene.text.*
     ■ javafx.scene.web.*
  ○ Imágenes y formas
     ■ javafx.scene.image.*
     ■ javafx.scene.shape.*
     ■ javafx.scene.chart.*
     ■ javafx.scene.canvas.*
     ■ javafx.scene.paint.*
2. Creación de Formularios
● El Objeto javafx.scene.layout.Region
  ○   Área de la pantalla que contiene otros nodos
  ○   Se le puede dar forma
  ○   Admite CSS3
  ○   Es redimensionable a la prefSize de los nodos
      ■ Region.USE_PREF_SIZE
  ○   Calcula el alto y ancho de los nodos
      ■ Region.USE_COMPUTED_SIZE
      ■ Teniendo en cuenta el max y el min
  ○   Permite recortar la escena (clip)
  ○   Permite cambiar el cursor de ratón
  ○   Permite especificar cómo se renderiza (blend)
2. Creación de Formularios
● Layouts
2. Creación de Formularios
● Layouts
  ○ GridPane
    ■ Rejilla de celdas variables
    ■ add(), addRow() y addColumn()
    ■ setHgap() y setVgap()
    ■ Parámetros
        ●   row y column
        ●   rowSpan y columnSpan
    ■ ColumnConstraints
        ●   setPercentWidth()
        ●   setHgrow()
        ●   setHalignment()
        ●   setFillWidth()
2. Creación de Formularios
● Layouts
  ○ BorderPane
    ■ Rejilla de 5 casillas (N, S, W, E, C)
    ■ N, S y C totalmente dimensionados
    ■ W y E ajustados
    ■ Habitual como raíz
    ■ Métodos
        ●   setTop()
        ●   setBottom()
        ●   setLeft()
        ●   setRight()
        ●   setCenter()
2. Creación de Formularios
● Layouts
  ○ FlowPane
    ■ Componentes distribuidos en filas
    ■ O en columnas
    ■ setOrientation()
    ■ Según su tamaño
    ■ Permite alinear filas/cols
    ■ setColumnHalignment()
    ■ setRowValignment()
2. Creación de Formularios
● Layouts
  ○ AnchorPane
    ■ Panel de controles posicionables
    ■ Desplazamiento respecto de los bordes
    ■ Métodos estáticos
        ●   setTopAnchor()
        ●   setBottomAnchor()
        ●   setLeftAnchor()
        ●   setRightAnchor()
     ■ Redimensiona los nodos
     ■ Para cumplir restricciones
2. Creación de Formularios
● Layouts
  ○ TilePane
    ■ Rejilla de "tiles" de la misma dimensión
    ■ Horizontal o vertical
    ■ setOrientation()
    ■ Calcula su prefSize con
        ●   setPrefColumns()
        ●   setPrefRows()
     ■ Permite alinear los nodos
        ●   setAlignment()
        ●   setTileAlignment()
2. Creación de Formularios
● Layouts
  ○ StackPane
    ■ Panel de controles apilados
    ■ Orden Z
    ■ Permite alinear nodos
    ■ Permite poner márgenes
    ■ Métodos estáticos
        ●   setAlignment()
        ●   setMargin()
        ●   clearConstraints()
2. Creación de Formularios
● Layouts
  ○ SplitPane
    ■ Control con divisiones (divider)
    ■ Horizontales o verticales
    ■ No hereda de Group
    ■ Los controles no se salen
    ■ Divisiones no superpuestas
    ■ Contiene items, no children
    ■ Redimensiona sus nodos
    ■ Pero es deshabilitable
        ●   setResizableWithParent()
2. Creación de Formularios
● Layouts
  ○ TabPane
    ■ Control con pestañas posicionables a los 4 lados
    ■ Contiene Objetos tipo Tab
    ■ Cerrables o no
        ●   setTabClosingPolicy()
     ■ Cada Tab contiene 1 nodo
        ●   setContent()
     ■ Admite estilos CSS
     ■ Y ContextMenu
2. Creación de Formularios
● Layouts
  ○ TitledPane
    ■ Control etiquetado (Labeled)
    ■ Panel con un título
    ■ Colapsable o no
        ●   setCollapsible()
        ●   setExpanded()
     ■ Contiene 1 nodo
     ■ Se usa en conjunto
     ■ Acordeón
2. Creación de Formularios
● Layouts
  ○ Accordion
    ■ Conjunto de TitledPanes
    ■ Diseñado para que sólo 1 esté desplegado
    ■ setExpandedPane()
    ■ Contiene paneles
    ■ getPanes()
2. Creación de Formularios
● Layouts
  ○ HBox y VBox
    ■ Paneles horizontal y vertical respectivamente
    ■ Permite indicar el modo de redimensión
    ■ Permite añadir márgenes a los nodos
    ■ Métodos estáticos
        ●   setHgrow()
        ●   setVgrow()
        ●   setMargin()
     ■ No importa el alto (HBox)
     ■ O el ancho (VBox)
2. Creación de Formularios
● Layouts
2. Creación de Formularios
● Ejercicio 4

  ○ Crear una ventana BorderLayout
  ○ Con Layouts en cada extremo
    ■ Top
    ■ Bottom
    ■ Left
    ■ Right
    ■ Center
  ○ Distribuyendo componentes
  ○ Distintos en cada Layout
JavaFX
3. SceneBuilder
3. SceneBuilder
● ¿Qué es SceneBuilder?
  1. Aplicación de Diseño de Formularios
     ■ Drag & Drop
     ■ AnchorPane
     ■ Propiedades, Layout y Eventos
     ■ FXML
  2. Paquete para construir Componentes
     ■ Clases Estáticas
     ■ Patrón Chaining
     ■ Patrón Builder
     ■ Patrón MVC
     ■ Formato árbol
3. SceneBuilder
3. SceneBuilder
● Patrón MVC
  ○ FXML es un fichero de Vista
  ○ Admite una Clase Controller
  ○ Con métodos tipo evento
    ■ void evento(ActionEvent)
  ○ Para responder a las acciones de los controles
● FXML
  ○ Namespace fx="http://javafx.com/fxml"
  ○ fx:controller="curso.ejemplos.MiControlador"
  ○ Atributos on
     ■ onAction="#evento"
3. SceneBuilder
● Ejercicio 5

  ○   Diseñar la ventana del ejercicio 4
  ○   Con SceneBuilder
  ○   Abrir el fichero FXML
  ○   Desde NetBeans
  ○   Probar el asistente de código
3. SceneBuilder
3. SceneBuilder
● Objetos Builder
  ○   GroupBuilder.create().build()
  ○   TextBuilder.create().build()
  ○   CheckBoxBuilder.create().build()
  ○   ButtonBuilder.create().build()
  ○   TextFieldBuilder.create().build()
  ○   VBoxBuilder.create().build()
  ○   RectangleBuilder.create().build()
  ○   ImageViewBuilder.create().build()
  ○   ...
  ○   applyTo()
3. SceneBuilder
● Ejercicio 6

  ○ Crear una escena tipo PONG
    ■ GroupBuilder
    ■ CircleBuilder
    ■ RectangleBuilder
    ■ ButtonBuilder
  ○ Rellenar la escena con un
    LinearGradient
3. SceneBuilder
● Propiedades y Binding
  ○ Todos los controles tienen propiedades
     ■ getter y setter (Java Bean)
     ■ Property (JavaFX Bean)
  ○ javafx.beans.property
     ■ StringProperty, SimpleStringProperty
     ■ BooleanProperty, SimpleBooleanProperty
     ■ ListProperty, SimpleListProperty
     ■ ...
  ○ Permiten enlazar valores de controles
  ○ Más sencillo que los Scripts de JavaFX 1.x
3. SceneBuilder
● Propiedades
  ○   getBean()
  ○   getName()
  ○   get() y getValue()
  ○   bind() y unbind()
  ○   bindBidirectional()
  ○   Métodos específicos
      ■ not(), or(), and()
      ■ greaterThan(), lessThan(), isEqualTo()
      ■ concat()
3. SceneBuilder
● Binding
  ○ Enlace de valores de un control
  ○ Normalmente a través de propiedades
  ○ javafx.beans.binding.Bindings
     ■ Permite capturar la modificación de valores
     ■ Y operar con ellos
     ■ add(), subtract(), multiply(), divide(),...
     ■ getValue()
     ■ format()
     ■ Implementa el Patrón Chaining
3. SceneBuilder
● Binding
  ○ Ejemplo: Área de un triángulo
3. SceneBuilder
● Binding condicional
  ○ javafx.beans,bindings.When
  ○ Patrón Builder para condiciones
     ■ NumberConditionBuilder
     ■ BooleanConditionBuilder
     ■ StringConditionBuilder
     ■ ObjectConditionBuilder
  ○ Aplicado sobre un binding
  ○ Admite Patrón Chaining
     ■ new When().then().otherwise()
3. SceneBuilder
● Binding condicional
  ○ Ejemplo
3. SceneBuilder
● Ejercicio 7

  ○ Crear un Stage
  ○ Con Text, CheckBox, TextField
  ○ Enlazados a las propiedades
    ■ x, y
    ■ width, height, área del Stage
    ■ focus
    ■ resizable
    ■ title
  ○ Centrar los controles mediante binding
JavaFX
4. Eventos, Manejadores y Filtros
4. Eventos, Manejadores y
Filtros
● Eventos en JavaFX
  ○ Clasificados por tipo
  ○ Tienen un origen y un destinatario
    ■ Nodo seleccionado o en la posición marcada
  ○ Que puede recoger o no el evento
    ■ Fase de captura
    ■ Fase de Bubbling
  ○ Manejadores (Handlers)
  ○ Filtros (Filter)
  ○ Se puede consumir el evento
    ■ consume()
4. Eventos, Manejadores y
Filtros
● Eventos en JavaFX
4. Eventos, Manejadores y
Filtros
● Algunas Interfaces
4. Eventos, Manejadores y
Filtros
● Observable
  ○ Permite registrar InvalidationListener
  ○ Disparado al cambiar el valor de una propiedad
  ○ O desde un objeto de binding
● ObservableValue
  ○ Permite registrar ChangeListener
  ○ Disparado al cambiar el valor de una propiedad
  ○ Lazy binding
● ReadOnlyProperty
  ○ Proporciona el getBean() y el getName()
4. Eventos, Manejadores y
Filtros
● Filtros de Eventos
  ○ Disparados durante la captura
  ○ Registrables y eliminables de cualquier nodo
  ○ Se debe indicar el tipo de evento
    ■ Clase controladora EventHandler
    ■ Clase de evento EventType
4. Eventos, Manejadores y
Filtros
● Manejadores de Eventos
  ○ Disparados durante el bubbling
  ○ Registrables y eliminables de cualquier nodo
  ○ Se debe indicar el tipo de evento
    ■ Clase controladora EventHandler
    ■ Clase de evento EventType
4. Eventos, Manejadores y
Filtros
● Casos Particulares
  ○ Eventos Comunes
    ■ Mouse
    ■ Key
    ■ ContextMenu
    ■ Drag
  ○ Gestures
    ■ Scroll
    ■ Swipe
    ■ Touch
    ■ Rotate
    ■ Zoom
4. Eventos, Manejadores y
Filtros
● Añadir eventos a una propiedad
  ○   addListener()
  ○   Tipo ChangeListener
  ○   Tipo InvalidationListener
  ○   removeListener()


● Añadir eventos a un nodo
  ○ addEventFilter()
  ○ addEventHandler()
  ○ Tipo EventHandler
4. Eventos, Manejadores y
Filtros
● Ejercicio 8

  ○ Añadir eventos a los ejercicios 6 y 7
  ○ A través de propiedades
    ■ CheckBox de fullScreen
  ○ A través de EventHandler
    ■ Botones de cierre y toBack()
    ■ Eventos de ratón
    ■ Eventos de teclado
4. Eventos, Manejadores y
Filtros
● Controles de Datos

  ○   ListView
  ○   TableView
  ○   TreeView
  ○   ChoiceBox
  ○   ComboBox
  ○   MenuBar?
4. Eventos, Manejadores y
Filtros
● ObservableList
  ○ Construible mediante FXCollections
  ○ Lista de Objetos con eventos
    ■ Tipo Change
  ○ Añadible a un control de datos
4. Eventos, Manejadores y
Filtros
● ObservableMap
  ○ Equivalente a ObservableList
  ○ Evento Change específico
4. Eventos, Manejadores y
Filtros
● FXCollections
  ○   observableList(List<T>)
  ○   observableArrayList(T...)
  ○   concat(ObservableList<T>...)
  ○   synchronizedObservableList(ObservableList<T>)
  ○   observableMap(Map<K,V>)
  ○   observableHashMap()
  ○   sort(ObservableList<T>)
  ○   reverse(ObservableList<T>)
  ○   rotate(ObservableList<T>,int)
  ○   shuffle(ObservableList<T>)
  ○   ...
4. Eventos, Manejadores y
Filtros
● ListView de objetos
  ○ Hay que componer cada item
  ○ setCellFactory(Callback)
  ○ Clase abstracta a implementar
    ■ Método call() que devuelve una casilla
    ■ ListCell<Persona>
        ●   Clase abstracta a implementar
        ●   Método updateItem() para mostrar valores
        ●   Control de tipo Labeled
        ●   Admite etiqueta y Tooltip
4. Eventos, Manejadores y
Filtros
● ListView de objetos
4. Eventos, Manejadores y
Filtros
● TableView de objetos
  ○   Hay que especificar cada columna
  ○   TableColumn<Objeto, String>
  ○   Y asociar la propiedad
  ○   setCellValueFactory(new PropertyValueFactory())
4. Eventos, Manejadores y
Filtros
● TableView de objetos
  ○ Valores editables
    ■ setEditable()
    ■ setCellFactory()
    ■ setOnEditCommit()
4. Eventos, Manejadores y
Filtros
● TableView de objetos
  ○ Valores editables NO TextField
    ■ setCellFactory()
    ■ Extender TableCell<Objeto, String>
4. Eventos, Manejadores y
Filtros
● TableView de objetos
  ○ Clase TableCell<Objeto, String>
    ■ startEdit()
    ■ cancelEdit()
    ■ updateItem(String, boolean)
    ■ isEditing()
    ■ setText(String)
    ■ setGraphic(Node)
4. Eventos, Manejadores y
Filtros
● Binding de Colecciones
  ○ Bindings.bindContentBidirectional(
       ObservableList<T>, ObservableList<T>);
  ○ Enlaza la lista
  ○ Responde a cambios en la lista
  ○ No en los items
  ○ Resetear el item modificado en su posición
    ■ listaObservable.set(
           tableView.getTablePosition().getRow(), item);
4. Eventos, Manejadores y
Filtros
● Ejercicio 9

  ○ Crear las clases Cliente, Pedido, Producto
  ○ Crear un formulario de datos
  ○ Enlazar las propiedades de un cliente
  ○ Crear eventos de compra de producto
    ■ ListView de Productos
  ○ Enlazar el precio final del pedido
    ■ Según el tipo de cliente (normal/vip)
4. Eventos, Manejadores y
Filtros
● Eventos de tiempo
4. Eventos, Manejadores y
Filtros
● Atajos de teclado
  ○ Aceleradores
    ■ Combinaciones de teclas
    ■ KeyCombination
        ●   KeyCodeCombination, KeyCharacterCombination
    ■ Disparan el evento onAction
  ○ Mnemonicos
    ■ Alt+Tecla
    ■ Poner un underscore _
    ■ setMnemonicParsing(true)
    ■ Acceden al nodo
JavaFX
5. Estilos CSS
5. Estilos CSS
● JavaFX utiliza CSS para el aspecto de los
  controles y escenas
5. Estilos CSS
● ¿Qué es CSS?
  ○ Cascade StyleSheet
  ○ Clase (selector) y reglas de aspecto
5. Estilos CSS
● Estilos por defecto
  ○ caspian.css
  ○ com/sun/javafx/scene/control/skin/caspian
  ○ Selectores
    ■ root
    ■ label, button, toggle-button, radio, check-box,
       hyperlink, menu, context-menu, choice-box,...
    ■ :disabled, :hover, :focused, :default, :armed, :
       selected, :visited, :showing, :filled,...
5. Estilos CSS
● Estilos por defecto
  ○ caspian.css
  ○ com/sun/javafx/scene/control/skin/caspian
  ○ Reglas de aspecto
    ■ -fx-*
    ■ background, color, disabled-color, dark-text-color, stroke,
         disabled-opacity, padding, font, effect,...
5. Estilos CSS
● Estilos por defecto
  ○ Funciones sobre estilos
    ■ derive() hace un estilo más claro/oscuro
    ■ ladder() hace una escala de colores
    ■ linear-gradient()
    ■ radial-gradient()
    ■ rgba()
  ○ Funciones de efectos
    ■ dropshadow()
    ■ innershadow()
5. Estilos CSS
● Estilos personalizados
  ○ Añadir el CSS a la escena
    a. scene.getStylesheets().add("miCSS.css");
    b. SceneBuilder.create()
          .stylesheets(Ventana.class
              .getResource("miCSS.css")
              .toExternalForm())
5. Estilos CSS
● Estilos personalizados
  ○ Formatos del CSS
    a. .button{}
    b. .miClaseBoton{}
    c. #miSelectorBoton{}

  ○ ¿Cómo se aplica?
    a. Por defecto
    b. getStyleClass().add("miClaseBoton")
    c. setId("miSelectoBoton")
    d. setStyle("-fx-background-color: #373737;")
5. Estilos CSS
● Limitaciones
  ○ NO se admiten relaciones XPath
    ■ :fist-child,:after, :before, :lang, :active, :focus, ...
  ○ NO se admiten varios Font
    ■ Arial, Verdana, Courier;
  ○ Cada control sólo admite una clase CSS
    ■ Suplanta a la anterior
    ■ Usar selectores por ID
5. Estilos CSS
● Ejercicio 10

  ○ Aplicar un estilo "hardcoded" a un control
  ○ Crear un CSS de estilos sobrecargados
  ○ Crear un CSS de estilos personalizados
    ■ Modo clase
    ■ Modo selector
5. Estilos CSS
● CSS compilado
  ○   Formato binario BSS
  ○   Mejora el rendimiento
  ○   Para ficheros CSS grandes
  ○   Cargar el fichero BSS en lugar del CSS
JavaFX
6. Contenido HTML
6. Contenido HTML
● JavaFX soporta HTML5
● El motor de renderizado HTML es Webkit
  ○ Chrome
  ○ Safari
● Controles de Navegador
  ○ WebView
  ○ WebEngine
6. Contenido HTML
● javafx.scene.web.WebEngine
  ○ Motor HTML
  ○ NO visual
  ○ Carga páginas en background
  ○ Genera y ejecuta su
    ■ DOM
    ■ CSS
    ■ JavaScript
  ○ Permite interactuar con su contenido
    ■ Callbacks
    ■ Document
    ■ Mapeo de Objetos
6. Contenido HTML
● Callbacks
  ○ Eventos asociados a JavaScript
            JavaScript         WebEngine

            window.alert()     onAlert

            window.confirm()   confirmHandler

            window.open()      createPopupHandler

            window.open()      onVisibilityChanged
            window.close()

            window.prompt()    promptHandler
6. Contenido HTML
● Callbacks
  ○ Ejecución de Scripts
    ■ executeScript()
  ○ Ejecución "desde" Scripts
    ■ Un JS invoca a un método (público) de Java
    ■ JSObject
6. Contenido HTML
● Document
  ○   Modelo de representación de DOM
  ○   getDocument()
  ○   getElementById()
  ○   Element
  ○   EventTarget
6. Contenido HTML
● Mapeo de Objetos
  ○ JS a Java
    ■ netscape.javascript.JSObject
    ■ JSObject jdoc = (JSObject) webEngine.getDocument();
    ■ JSObject window = (JSObject) webEngine.executeScript
        ("window");
  ○ Java a JS
    ■ call()
    ■ eval()
    ■ getMember()
    ■ setMember()
6. Contenido HTML
● javafx.scene.web.WebView
  ○   Nodo que gestiona un WebEngine
  ○   Y muestra su contenido
  ○   Gestiona el scroll
  ○   Gestiona eventos
      ■ Ratón
      ■ Teclado
6. Contenido HTML
● Ejercicio 11

  ○ Conectar con Google
  ○ Añadir un Text que muestre la búsqueda
    ■ A mi escena
  ○ Ocultar el botón "Buscar con Google"
JavaFX
7. Aplicaciones Multipantalla
7. Aplicaciones
Multipantalla
● Tipos de multipantalla
  ○   Preloader
  ○   Diálogos
  ○   Popups
  ○   Ventanas Modales

  ○ Abrir/Cerrar
  ○ Interactivas
7. Aplicaciones
Multipantalla
● Preloader
  ○   Ventana de carga
  ○   Con una barra de progreso
  ○   Asociada a un Stage en construcción
  ○   Extender javafx.application.Preloader
  ○   Se ejecuta con un Application
  ○   notifyPreloader()
  ○   Proceso de background
      ■ javafx.concurrency.Task
7. Aplicaciones
Multipantalla
● Preloader
7. Aplicaciones
Multipantalla
● Ventanas Emergentes
  ○ Popups
  ○ Clase específica que hereda Stage
  ○ Con la ventana principal como Owner
7. Aplicaciones
Multipantalla
● Dialogos
  ○   Ventanas emergentes modales
  ○   Respuesta opcional (YES/NO/CANCEL)
  ○   No hay clases diálogo específicas
  ○   Opción
      ■ Librería https://github.com/hecklerm/DialogFX
      ■ Anton Smirnov
      ■ DialogFX
      ■ showDialog()
      ■ Type
         ●   QUESTION, ACCEPT, INFO, ERROR
7. Aplicaciones
Multipantalla
● Ejercicio 12

  ○ Crear una ventana emergente para ocultar la
    escena
  ○ O volver a mostrarla
7. Aplicaciones
Multipantalla
● Ventanas Interactivas
  ○   Son objetos de Java
  ○   Utilizamos propiedades
  ○   O campos estáticos
  ○   Se puede hacer binding
  ○   PERO
      ■ No perder de vista QUIÉN es la ventana PADRE
7. Aplicaciones
Multipantalla
● Múltiples escenas en un Stage
  ○ Opción 1: StackPane
    ■ Pros
        ●   Fácil de diseñar
        ●   Fácil de ejecutar
        ●   Cambiar el panel que está encima
     ■ Contras
        ●   Consume recursos
        ●   La escena es grande
        ●   La mayoría de controles no se utilizan
7. Aplicaciones
Multipantalla
● Múltiples escenas en un Stage
  ○ Opción 2: Cambiar el árbol de nodos
    ■ Pros
        ●   Consume los recursos necesarios
        ●   Puedo mantener escenas simples
        ●   Como FXML separados
     ■ Contras
        ●   Requiere más programación
        ●   Se nota el cambio de nodos
        ●   Hay que cargar cada FXML
7. Aplicaciones
Multipantalla
● Múltiples escenas en un Stage
  ○ Solución de compromiso
    ■ Usar StackPane como soporte
    ■ Cambiar el árbol de nodos
    ■ Con efectos de transición
        ●   fade
        ●   translate
        ●   ...
     ■ Los eventos disparan el cambio de escena
7. Aplicaciones
Multipantalla
● Múltiples escenas en un Stage
  ○ Solución de compromiso
    1. Extender StackPane
    2. Almacenar los distintos árboles de nodos
    3. Implementar el cambio de pantalla
        ●   Timeline
    4. Implementar la eliminación de la escena
        ●   EventHandler<ActionEvent>
7. Aplicaciones
Multipantalla
● Múltiples escenas en un Stage
  ○ Evento de fadeOut
7. Aplicaciones
Multipantalla
● Múltiples escenas en un Stage
  ○ Cambio de escena y evento de fadeIn
7. Aplicaciones
Multipantalla
● Dispositivos móviles
  ○   Tamaño reducido
  ○   Memoria y procesador reducidos
  ○   TouchScreen
  ○   DESLIZAR
  ○   Truco
      ■ Usar una imagen de fondo
      ■ Suficientemente grande
      ■ Y desplazar el clip() o un panel...
7. Aplicaciones
Multipantalla
● Dispositivos móviles
7. Aplicaciones
Multipantalla
● Consideraciones de rendimiento

  ○   Es importante un Scene pequeño
  ○   Es importante que la navegación sea fácil
  ○   Es importante que cada ventana tenga sus eventos
  ○   Se puede usar StackPane
  ○   Pero con cuidado
JavaFX
8. Threads
8. Threads
● Clase javafx.application.Application
  ○   Gestiona el hilo de ejecución de JavaFX
  ○   launch(Application, args)
  ○   init()
  ○   start(Stage)
  ○   stop()
  ○   getParameters()
● Clase javafx.application.Platform
  ○   Gestiona la ejecución de hilos JavaFX
  ○   exit()
  ○   setImplicitExit()
  ○   runLater()
8. Threads
● Worker
  ○ Interfaz javafx.concurrent.Worker
  ○ Hilo que ejecuta un JavaFX Application
  ○ No bloquea la plataforma
  ○ Gestiona eventos de ejecución
     ■ runLater()
  ○ Es cancelable
  ○ Almacena
     ■ Estado de la tarea
     ■ Cantidad de trabajo realizada
     ■ Resultado de la tarea
     ■ Información descriptiva
8. Threads
● Clase javafx.concurrent.Task<T>
  ○ Implementa la interfaz Worker
  ○ Pero es abstracta
  ○ Hay que definir el método call()
8. Threads
● Ejercicio 13

  ○   Crear una ventana que simule una tarea lenta
  ○   Actualizando un ProgressBar
  ○   Enlazando sus propiedades
  ○   Haciendo la tarea cancelable
8. Threads
● Clase javafx.concurrent.Service<T>
  ○ Implementación reutilizable de Worker
  ○ Permite resetear el estado de un Worker
     ■ reset()
     ■ restart()
  ○ También es abstracta
  ○ Hay que implementar el método createTast()
  ○ Que devuelve un Task<T>
JavaFX
9. Empaquetado y Despliegue
9. Empaquetado y
Despliegue
● El empaquetado es esencial
  ○ Para que la app sea ejecutable
  ○ En distintos entornos (Escritorio, Web, Movil)
● Empaquetar a mano es complicado
● Herramienta JavaFX Packaging Tools
  ○   Garantiza que contiene las librerías de FX
  ○   Permite descargar dependencias
  ○   Ofrece al usuario información visual
  ○   Instalador o app autocontenida
  ○   javafxpackager
9. Empaquetado y
Despliegue
● Proceso de empaquetado
9. Empaquetado y
Despliegue
● Formatos de empaquetado
  ○ Standalone
    ■ Generado por defecto
    ■ Ejecutado desde JVM
  ○ Autocontenido
    ■ Con una JVM embebida
    ■ Opción de instalador específico
  ○ Aplicación WebStart
  ○ Aplicación embebida en Web
    ■ Ejecutada como Applet
    ■ Configurada mediante JavaScript
    ■ Plantilla HTML
9. Empaquetado y
Despliegue
● Ejemplo de paquete Web
  ○   JAR ejecutable con la aplicación
  ○   HTML con un JavaScript para lanzarla
  ○   Deployment Descriptor JNLP
  ○   Otros JAR y recursos
9. Empaquetado y
Despliegue
● Opciones de empaquetado
  ○ Codificar las CSS
    ■ Mejora el rendimiento
    ■ Para ficheros CSS grandes
    ■ BSS
  ○ Firmar el empaquetado
  ○ Configurar el Deployment Descriptor
    ■ Tamaño preferido del Stage
    ■ Requisitos de plataforma y opciones JVM
    ■ Permisos requeridos
    ■ ...
  ○ Plantilla HTML
9. Empaquetado y
Despliegue
● ¿Cómo Empaquetar?
  ○ NetBeans
     ■ Muchas configuraciones automáticas
     ■ En las propiedades del proyecto
  ○ Ant
     ■ Tareas específicas
     ■ <fx:*>
  ○ javafxpackager
     ■ Comando de consola
     ■ Modificadores de configuración
9. Empaquetado y
Despliegue
● NetBeans
9. Empaquetado y
Despliegue
● Ant
  ○ JDK 7
  ○ ant-javafx.jar
  ○ Tareas proporcionadas
    ■ Crear JARs ejecutables
    ■ Crear HTML y JNLP para Web y WebStart
    ■ Firmar JARs
    ■ Compilar CSS
    ■ Empaquetar aplicaciones autocontenidas
        ●   nativeBundles="image"
        ●   nativeBundles="installer"
        ●   nativeBundles="all"
9. Empaquetado y
Despliegue
● Ant
  ○ build.xml
9. Empaquetado y
Despliegue
● javafxpackager
  ○   -createbss
  ○   -createjar
  ○   -deploy (app standalone)
  ○   -deploy -native
  ○   -makeall (createjar + deploy)
  ○   -signJar
  ○   -outdir
  ○   -srcdir
  ○   ...
9. Empaquetado y
Despliegue
● Aplicación autocontenida
  ○ Sólo JDK 7u6
  ○ Pros
    ■ Se controla la JVM (no es necesario tenerla)
    ■ Se muestra un instalador
    ■ No se requieren privilegios de administrador
  ○ Contras
    ■ Exige descargar partes de la app
    ■ Versiones distintas para cada entorno
    ■ Hay que gestionar las actualizaciones
9. Empaquetado y
Despliegue
● Aplicación autocontenida
  ○ Configuración por Ant
  ○ nativeBundles en <fx:deploy>
    ■ image
    ■ exe
    ■ msi
    ■ dmg
    ■ rpm
    ■ deb
  ○ Requieren herramientas de terceros
    ■ InnoSetup, WiX, RPM Builder,...
9. Empaquetado y
Despliegue
● Despliegue en Navegador
  ○   Libería Deployment Toolkit
  ○   http://java.com/js/dtjava.js
  ○   Genera JavaScript
  ○   Detecta el runtime
  ○   Descarga dependencias
  ○   Informa al usuario
  ○   Ant <fx:deploy>
9. Empaquetado y
Despliegue
● Despliegue en Navegador
  ○ Admite eventos
    ■ onGetSplash
    ■ onDeployError
    ■ ...
  ○ Admite paso de parámetros
  ○ Permite acceder a código JavaFX
    ■ Configurar un id al crear la dtjava.App
    ■ document.getElementById(id)
    ■ Ejecutar un método público
9. Empaquetado y
Despliegue
● Plantilla HTML
  ○   #DT.SCRIPT.ULR#
  ○   #DT.EMBED.CODE.ONLOAD(idDeLaApp)#
  ○   ZZZ es el placeholder de dtjava
  ○   Configurable con Ant <fx:template>
9. Empaquetado y
Despliegue
● Plantilla HTML
JavaFX
10. Gráficos y Multimedia
10. Gráficos y Multimedia
● JavaFX integra controles para
  ○   Formas
  ○   Charts
  ○   Imágenes
  ○   Videos
  ○   Audio
● Se insertan como controles normales
10. Gráficos y Multimedia
● Formas
  ○ javafx.scene.shape.*
     ■ Líneas
        ●   Arc, Line, Polyline, CubicCurve, QuadCurve, Path, MoveTo
     ■ Figuras geométricas
        ●   Circle, Ellipse, Polygon, Rectangle
     ■ Otros
        ●   SVGPath, Text
10. Gráficos y Multimedia
● Charts
  ○ javafx.scene.chart.*
  ○ 3 partes
     ■ Título
     ■ Leyenda
     ■ Contenido
  ○ Usan datos de tipo ObservableList<T>
10. Gráficos y Multimedia
● Charts
  ○ PieChart
    ■ ObservableList<PieChart.Data>
    ■ new PieChart.Data("etiqueta", valor%)
10. Gráficos y Multimedia
● Charts
  ○ ScatterChart y LineChart
    ■ ObservableList<XYChart.Series<X,Y>>
    ■ new Series<Integer, Double>()
    ■ new XYChart.Data(x, y)
10. Gráficos y Multimedia
● Imágenes
  ○ Control ImageView
  ○ Utiliza un objeto javafx.scene.image.Image
  ○ Construible con una URL
10. Gráficos y Multimedia
● Audio y video
  ○ Framework de reproducción multimedia
  ○ javafx.scene.media.*
  ○ Clase Media
     ■ Construye un objeto multimedia
     ■ A partir de un recurso cargado por path
  ○ Clase MediaPlayer
     ■ Reproduce objetos Media
     ■ play(), pause(), stop(), seek(),...
  ○ Clase MediaView
     ■ Nodo que muestra un Media reproducido por un
       MediaPlayer
10. Gráficos y Multimedia
● Audio y video
10. Gráficos y Multimedia
● Audio
  ○ Soporta MP3, WAV, AIFF y AAC
  ○ Clase AudioClip
    ■ Para ficheros pequeños
    ■ < 100KB
10. Gráficos y Multimedia
● Audio
  ○ Utilizando el framework de multimedia
  ○ Admite metadatos del contenido
10. Gráficos y Multimedia
● Video
  ○ Formato de video nativo FXM
  ○ Similar a Flash Video FLV
  ○ Requiere un MediaView
    ■ Admite ViewPort
10. Gráficos y Multimedia
● Video
  ○ Se pueden poner Markers al Media
  ○ Y gestionarlos desde el MediaPayer
JavaFX
Muchas Gracias

Más contenido relacionado

La actualidad más candente

computer science JAVA ppt
computer science JAVA pptcomputer science JAVA ppt
computer science JAVA pptbrijesh kumar
 
Introducción a php
Introducción a phpIntroducción a php
Introducción a phpalan moreno
 
Ejercicios de programación en C (Estructuras condicionales-Selectivas)
Ejercicios de programación en C (Estructuras condicionales-Selectivas)Ejercicios de programación en C (Estructuras condicionales-Selectivas)
Ejercicios de programación en C (Estructuras condicionales-Selectivas)Maynor Mendoza
 
Tutorial algoritmo estructuras ciclicas
Tutorial algoritmo estructuras ciclicasTutorial algoritmo estructuras ciclicas
Tutorial algoritmo estructuras ciclicasMichele André
 
Fundamentos de Programación
Fundamentos de ProgramaciónFundamentos de Programación
Fundamentos de ProgramaciónKudos S.A.S
 
Loops PHP 04
Loops PHP 04Loops PHP 04
Loops PHP 04Spy Seat
 
javascript objects
javascript objectsjavascript objects
javascript objectsVijay Kalyan
 
Java introdução ao eclipse
Java   introdução ao eclipseJava   introdução ao eclipse
Java introdução ao eclipseArmando Daniel
 
Comandos básicos ms-dos
Comandos básicos ms-dosComandos básicos ms-dos
Comandos básicos ms-dosDianithaa17
 
Comandos básicos ms dos
Comandos básicos ms dosComandos básicos ms dos
Comandos básicos ms dosbriant95
 
Tópicos Avanzados de Programación - Unidad 3 programacion concurrente
Tópicos Avanzados de Programación - Unidad 3 programacion concurrenteTópicos Avanzados de Programación - Unidad 3 programacion concurrente
Tópicos Avanzados de Programación - Unidad 3 programacion concurrenteJosé Antonio Sandoval Acosta
 
Tópicos Avanzados de Programación - Unidad 2 componentes y librerias
Tópicos Avanzados de Programación - Unidad 2 componentes y libreriasTópicos Avanzados de Programación - Unidad 2 componentes y librerias
Tópicos Avanzados de Programación - Unidad 2 componentes y libreriasJosé Antonio Sandoval Acosta
 
Cuestionario
CuestionarioCuestionario
Cuestionariojpauly4
 

La actualidad más candente (20)

computer science JAVA ppt
computer science JAVA pptcomputer science JAVA ppt
computer science JAVA ppt
 
Introducción a php
Introducción a phpIntroducción a php
Introducción a php
 
Java interfaces
Java interfacesJava interfaces
Java interfaces
 
Ejercicios de programación en C (Estructuras condicionales-Selectivas)
Ejercicios de programación en C (Estructuras condicionales-Selectivas)Ejercicios de programación en C (Estructuras condicionales-Selectivas)
Ejercicios de programación en C (Estructuras condicionales-Selectivas)
 
Tutorial algoritmo estructuras ciclicas
Tutorial algoritmo estructuras ciclicasTutorial algoritmo estructuras ciclicas
Tutorial algoritmo estructuras ciclicas
 
Fundamentos de Programación
Fundamentos de ProgramaciónFundamentos de Programación
Fundamentos de Programación
 
Loops PHP 04
Loops PHP 04Loops PHP 04
Loops PHP 04
 
Java - Primeiros passos
Java - Primeiros passosJava - Primeiros passos
Java - Primeiros passos
 
Java
JavaJava
Java
 
javascript objects
javascript objectsjavascript objects
javascript objects
 
Java introdução ao eclipse
Java   introdução ao eclipseJava   introdução ao eclipse
Java introdução ao eclipse
 
Comandos básicos ms-dos
Comandos básicos ms-dosComandos básicos ms-dos
Comandos básicos ms-dos
 
Comandos básicos ms dos
Comandos básicos ms dosComandos básicos ms dos
Comandos básicos ms dos
 
File system node js
File system node jsFile system node js
File system node js
 
1. introducción a c#
1.  introducción a c#1.  introducción a c#
1. introducción a c#
 
Tópicos Avanzados de Programación - Unidad 3 programacion concurrente
Tópicos Avanzados de Programación - Unidad 3 programacion concurrenteTópicos Avanzados de Programación - Unidad 3 programacion concurrente
Tópicos Avanzados de Programación - Unidad 3 programacion concurrente
 
Proyecto poo
Proyecto pooProyecto poo
Proyecto poo
 
Tópicos Avanzados de Programación - Unidad 2 componentes y librerias
Tópicos Avanzados de Programación - Unidad 2 componentes y libreriasTópicos Avanzados de Programación - Unidad 2 componentes y librerias
Tópicos Avanzados de Programación - Unidad 2 componentes y librerias
 
Programacion Batch
Programacion BatchProgramacion Batch
Programacion Batch
 
Cuestionario
CuestionarioCuestionario
Cuestionario
 

Similar a JavaFX 2 (20)

Swing (1)
Swing (1)Swing (1)
Swing (1)
 
S2-PD2-1.2 Web Forms
S2-PD2-1.2 Web FormsS2-PD2-1.2 Web Forms
S2-PD2-1.2 Web Forms
 
Parte II. Notas Rapidas (sticky notes) App W8: MVVM y SQLite.
Parte II. Notas Rapidas (sticky notes) App W8: MVVM y SQLite.Parte II. Notas Rapidas (sticky notes) App W8: MVVM y SQLite.
Parte II. Notas Rapidas (sticky notes) App W8: MVVM y SQLite.
 
Swing
SwingSwing
Swing
 
ventanas swing en java
ventanas swing en javaventanas swing en java
ventanas swing en java
 
Swing
SwingSwing
Swing
 
Swing
SwingSwing
Swing
 
Swing
SwingSwing
Swing
 
Introducción a swing. taller de programación 2016
Introducción a swing. taller de programación 2016Introducción a swing. taller de programación 2016
Introducción a swing. taller de programación 2016
 
Swing.pptx
Swing.pptxSwing.pptx
Swing.pptx
 
Dragome en JavaConf Buenos Aires 2014
Dragome en JavaConf Buenos Aires 2014 Dragome en JavaConf Buenos Aires 2014
Dragome en JavaConf Buenos Aires 2014
 
Java - Tutorial Ventanas
Java - Tutorial VentanasJava - Tutorial Ventanas
Java - Tutorial Ventanas
 
Manual java
Manual javaManual java
Manual java
 
Introducción a las librerías PyGame y PyOpenGL
Introducción a las librerías PyGame y PyOpenGLIntroducción a las librerías PyGame y PyOpenGL
Introducción a las librerías PyGame y PyOpenGL
 
Java tema06a
Java tema06aJava tema06a
Java tema06a
 
Programa
ProgramaPrograma
Programa
 
S2-PD2.pptx
S2-PD2.pptxS2-PD2.pptx
S2-PD2.pptx
 
S2-PD2.pptx
S2-PD2.pptxS2-PD2.pptx
S2-PD2.pptx
 
Unidad 01 Tema 01 2022 LPI (1891).pdf
Unidad 01 Tema 01 2022 LPI (1891).pdfUnidad 01 Tema 01 2022 LPI (1891).pdf
Unidad 01 Tema 01 2022 LPI (1891).pdf
 
12swing gui
12swing gui12swing gui
12swing gui
 

Más de Oliver Centeno (20)

Metodologías ágiles
Metodologías ágilesMetodologías ágiles
Metodologías ágiles
 
Spring framework 3
Spring framework 3Spring framework 3
Spring framework 3
 
Métrica v3 y RUP
Métrica v3 y RUPMétrica v3 y RUP
Métrica v3 y RUP
 
ATL
ATLATL
ATL
 
Herramientas Java
Herramientas JavaHerramientas Java
Herramientas Java
 
Web services y java
Web services y javaWeb services y java
Web services y java
 
Red Hat Enterprise Linux 5
Red Hat Enterprise Linux 5Red Hat Enterprise Linux 5
Red Hat Enterprise Linux 5
 
XML Básico
XML BásicoXML Básico
XML Básico
 
Java en Tiempo Real
Java en Tiempo RealJava en Tiempo Real
Java en Tiempo Real
 
Sun Java System Web Server 6.1
Sun Java System Web Server 6.1Sun Java System Web Server 6.1
Sun Java System Web Server 6.1
 
My SQL
My SQLMy SQL
My SQL
 
Microsoft Test Manager 2010
Microsoft Test Manager 2010Microsoft Test Manager 2010
Microsoft Test Manager 2010
 
SOA y Web Services
SOA y Web ServicesSOA y Web Services
SOA y Web Services
 
Perl (practical extraction and report language)
Perl (practical extraction and report language)Perl (practical extraction and report language)
Perl (practical extraction and report language)
 
Liferay
LiferayLiferay
Liferay
 
Joomla!
Joomla!Joomla!
Joomla!
 
TFS 10
TFS 10TFS 10
TFS 10
 
Azure
AzureAzure
Azure
 
Web 2.0
Web 2.0Web 2.0
Web 2.0
 
Enterprise Library 5
Enterprise Library 5Enterprise Library 5
Enterprise Library 5
 

Último

Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 

Último (13)

Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 

JavaFX 2

  • 2. Contenidos 1. ¿Qué es JavaFX? 2. Construcción de Formularios 3. SceneBuilder 4. Eventos, Controladores y Filtros 5. Estilos CSS 6. Contenido HTML 7. Aplicaciones Multipantalla 8. Threads 9. Empaquetado y Despliegue 10. Gráficos y Multimedia
  • 4. 1. ¿Qué es JavaFX? ● Chris Oliver @ SeeBeyond ● F3 (Form Follows Function) ● Comprada por Sun en 2007 ● 1.0 JavaFX Script ○ Interpretado ○ Compilado (Elefante atravesando una puerta) ● 1.3 Oracle JavaFX (2010) ● 2.0 JavaFX API ● 2.2.7 Versión actual (2013)
  • 5. 1. ¿Qué es JavaFX? ● Herramientas gráficas ● Basadas en escenas ● Multiplataforma ● RIA ● Runtime Específico ● Desarrollo tipo Swing
  • 6. 1. ¿Qué es JavaFX? ● Instalación ○ JDK 1.7 ○ JavaFX SDK 2.2 ○ JavaFX SceneBuilder 1.0 ○ NetBeans IDE 7.3
  • 7. 1. ¿Qué es JavaFX? ● Primer JavaFX 1. Abrir NetBeans 2. New Project 3. JavaFX Application 4. Configurar JavaFX SDK 5. Indicar un nombre de proyecto 6. Indicar un nombre de clase 7. Ejecutar el proyecto
  • 8. 1. ¿Qué es JavaFX? ● Un ejemplo más complejo 1. Crear un objeto Text 2. Cambiar el color con setFill() 3. Cambiar la fuente con setFont() 4. Añadirlo a la ventana (root) 5. Ejecutar el proyecto 6. Arreglar el aspecto (Group)
  • 9. 1. ¿Qué es JavaFX? ● Ejercicio 1 ○ Crear múltiples textos ○ En posiciones aleatorias ○ Con colores aleatorios ○ Añadir rotación a los textos
  • 10. 1. ¿Qué es JavaFX? ● Efectos ○ Se pueden añadir sombras ■ DropShadow ■ InnerShadow ○ Brillos y Reflejos ■ Bloom ■ Glow ■ Reflection ○ Y otros efectos ■ javafx.scene.effect.* ■ setEffect()
  • 11. 1. ¿Qué es JavaFX? ● Caso Particular ○ Animaciones (javafx.animation) ○ Translate ■ Desplaza el texto ● setNode() ● setFromX(), setToX(), setByX() ■ Un periodo de tiempo ● setDuration() ■ Con una aceleración ● setInterpolator() ■ De manera cíclica ● setCycleCount() ● play()
  • 12. 1. ¿Qué es JavaFX? ● Ejercicio 2 ○ Probar algunos efectos ○ Desenfocados ■ BoxBlur ■ GaussianBlur ■ MotionBlur ○ Con fuente de luz ■ Glow ■ Lighting ○ Otros
  • 13. JavaFX 2. Creación de Formularios
  • 14. 2. Creación de Formularios ● El Objeto javafx.stage.Stage ○ Interfaz de una aplicación JavaFX ○ Independiente de dispositivo ○ Equivale a JFrame ■ setTitle() ■ show() ■ close() ■ centerOnScreen() ■ toBack() ■ toFront()
  • 15. 2. Creación de Formularios ● El Objeto javafx.stage.Stage ○ Owner ■ Ventana que contiene el stage ■ initOwner() ○ Modality ■ Especifica que la ventana sea modal ■ initModality() ○ StageStyle ■ Especifica el estilo de fondo de la ventana ■ initStyle()
  • 16. 2. Creación de Formularios ● El Objeto javafx.stage.Screen ○ Pantalla sobre la que se proyecta el Stage ○ Admite entornos multipantalla ■ getScreens() ■ getPrimary() ○ Permite consultar el tamaño ■ getBounds() ■ getVisualBounds() ○ Permite consultar la resolución ■ getDpi()
  • 17. 2. Creación de Formularios ● El Objeto javafx.scene.Scene ○ Elementos gráficos mostrados en el Stage ○ Permite indicar ■ Eventos ■ Cursor ■ Cámara ■ Mnemónicos ■ Css ■ etc ○ Permite capturar imágenes ○ Permite drag & drop
  • 18. 2. Creación de Formularios ● El Objeto javafx.scene.Scene ○ Modelo de árbol ○ Admite como raíz cualquier objeto javafx.scene. Node ■ Tipo Parent ● Group ● Region ■ Tipo Control ● Tipo Contenedor ● Tipo Componente ○ Caso particular: layouts (Paneles)
  • 19. 2. Creación de Formularios ● El Objeto javafx.scene.Group ○ Contiene otros controles ordenados ○ Propaga transformaciones, efectos y estados ○ SÍ posicionable, NO redimensionable ■ setLayoutX() ■ setAutoSizeChildren() ■ setRotation() ■ setStyle() ■ setScaleX() ■ setTranslateX() ■ ...
  • 20. 2. Creación de Formularios ● Ejercicio 3 ○ Probar los estilos de un Stage ○ Crear una ventana transparente ○ Centrada en la pantalla ○ Comprobar los límites de la pantalla ○ Crear un grupo de controles ○ Aplicarle rotaciones, escalas y transformaciones (desde el grupo, claro)
  • 21. 2. Creación de Formularios ● Jerarquía de Controles Node MediaView Canvas Parent Shape ImageView Control Group Region Chart Pane
  • 22. 2. Creación de Formularios ● Controles ○ Controles básicos ■ javafx.scene.control.* ■ javafx.scene.text.* ■ javafx.scene.web.* ○ Imágenes y formas ■ javafx.scene.image.* ■ javafx.scene.shape.* ■ javafx.scene.chart.* ■ javafx.scene.canvas.* ■ javafx.scene.paint.*
  • 23. 2. Creación de Formularios ● El Objeto javafx.scene.layout.Region ○ Área de la pantalla que contiene otros nodos ○ Se le puede dar forma ○ Admite CSS3 ○ Es redimensionable a la prefSize de los nodos ■ Region.USE_PREF_SIZE ○ Calcula el alto y ancho de los nodos ■ Region.USE_COMPUTED_SIZE ■ Teniendo en cuenta el max y el min ○ Permite recortar la escena (clip) ○ Permite cambiar el cursor de ratón ○ Permite especificar cómo se renderiza (blend)
  • 24. 2. Creación de Formularios ● Layouts
  • 25. 2. Creación de Formularios ● Layouts ○ GridPane ■ Rejilla de celdas variables ■ add(), addRow() y addColumn() ■ setHgap() y setVgap() ■ Parámetros ● row y column ● rowSpan y columnSpan ■ ColumnConstraints ● setPercentWidth() ● setHgrow() ● setHalignment() ● setFillWidth()
  • 26. 2. Creación de Formularios ● Layouts ○ BorderPane ■ Rejilla de 5 casillas (N, S, W, E, C) ■ N, S y C totalmente dimensionados ■ W y E ajustados ■ Habitual como raíz ■ Métodos ● setTop() ● setBottom() ● setLeft() ● setRight() ● setCenter()
  • 27. 2. Creación de Formularios ● Layouts ○ FlowPane ■ Componentes distribuidos en filas ■ O en columnas ■ setOrientation() ■ Según su tamaño ■ Permite alinear filas/cols ■ setColumnHalignment() ■ setRowValignment()
  • 28. 2. Creación de Formularios ● Layouts ○ AnchorPane ■ Panel de controles posicionables ■ Desplazamiento respecto de los bordes ■ Métodos estáticos ● setTopAnchor() ● setBottomAnchor() ● setLeftAnchor() ● setRightAnchor() ■ Redimensiona los nodos ■ Para cumplir restricciones
  • 29. 2. Creación de Formularios ● Layouts ○ TilePane ■ Rejilla de "tiles" de la misma dimensión ■ Horizontal o vertical ■ setOrientation() ■ Calcula su prefSize con ● setPrefColumns() ● setPrefRows() ■ Permite alinear los nodos ● setAlignment() ● setTileAlignment()
  • 30. 2. Creación de Formularios ● Layouts ○ StackPane ■ Panel de controles apilados ■ Orden Z ■ Permite alinear nodos ■ Permite poner márgenes ■ Métodos estáticos ● setAlignment() ● setMargin() ● clearConstraints()
  • 31. 2. Creación de Formularios ● Layouts ○ SplitPane ■ Control con divisiones (divider) ■ Horizontales o verticales ■ No hereda de Group ■ Los controles no se salen ■ Divisiones no superpuestas ■ Contiene items, no children ■ Redimensiona sus nodos ■ Pero es deshabilitable ● setResizableWithParent()
  • 32. 2. Creación de Formularios ● Layouts ○ TabPane ■ Control con pestañas posicionables a los 4 lados ■ Contiene Objetos tipo Tab ■ Cerrables o no ● setTabClosingPolicy() ■ Cada Tab contiene 1 nodo ● setContent() ■ Admite estilos CSS ■ Y ContextMenu
  • 33. 2. Creación de Formularios ● Layouts ○ TitledPane ■ Control etiquetado (Labeled) ■ Panel con un título ■ Colapsable o no ● setCollapsible() ● setExpanded() ■ Contiene 1 nodo ■ Se usa en conjunto ■ Acordeón
  • 34. 2. Creación de Formularios ● Layouts ○ Accordion ■ Conjunto de TitledPanes ■ Diseñado para que sólo 1 esté desplegado ■ setExpandedPane() ■ Contiene paneles ■ getPanes()
  • 35. 2. Creación de Formularios ● Layouts ○ HBox y VBox ■ Paneles horizontal y vertical respectivamente ■ Permite indicar el modo de redimensión ■ Permite añadir márgenes a los nodos ■ Métodos estáticos ● setHgrow() ● setVgrow() ● setMargin() ■ No importa el alto (HBox) ■ O el ancho (VBox)
  • 36. 2. Creación de Formularios ● Layouts
  • 37. 2. Creación de Formularios ● Ejercicio 4 ○ Crear una ventana BorderLayout ○ Con Layouts en cada extremo ■ Top ■ Bottom ■ Left ■ Right ■ Center ○ Distribuyendo componentes ○ Distintos en cada Layout
  • 39. 3. SceneBuilder ● ¿Qué es SceneBuilder? 1. Aplicación de Diseño de Formularios ■ Drag & Drop ■ AnchorPane ■ Propiedades, Layout y Eventos ■ FXML 2. Paquete para construir Componentes ■ Clases Estáticas ■ Patrón Chaining ■ Patrón Builder ■ Patrón MVC ■ Formato árbol
  • 41. 3. SceneBuilder ● Patrón MVC ○ FXML es un fichero de Vista ○ Admite una Clase Controller ○ Con métodos tipo evento ■ void evento(ActionEvent) ○ Para responder a las acciones de los controles ● FXML ○ Namespace fx="http://javafx.com/fxml" ○ fx:controller="curso.ejemplos.MiControlador" ○ Atributos on ■ onAction="#evento"
  • 42. 3. SceneBuilder ● Ejercicio 5 ○ Diseñar la ventana del ejercicio 4 ○ Con SceneBuilder ○ Abrir el fichero FXML ○ Desde NetBeans ○ Probar el asistente de código
  • 44. 3. SceneBuilder ● Objetos Builder ○ GroupBuilder.create().build() ○ TextBuilder.create().build() ○ CheckBoxBuilder.create().build() ○ ButtonBuilder.create().build() ○ TextFieldBuilder.create().build() ○ VBoxBuilder.create().build() ○ RectangleBuilder.create().build() ○ ImageViewBuilder.create().build() ○ ... ○ applyTo()
  • 45. 3. SceneBuilder ● Ejercicio 6 ○ Crear una escena tipo PONG ■ GroupBuilder ■ CircleBuilder ■ RectangleBuilder ■ ButtonBuilder ○ Rellenar la escena con un LinearGradient
  • 46. 3. SceneBuilder ● Propiedades y Binding ○ Todos los controles tienen propiedades ■ getter y setter (Java Bean) ■ Property (JavaFX Bean) ○ javafx.beans.property ■ StringProperty, SimpleStringProperty ■ BooleanProperty, SimpleBooleanProperty ■ ListProperty, SimpleListProperty ■ ... ○ Permiten enlazar valores de controles ○ Más sencillo que los Scripts de JavaFX 1.x
  • 47. 3. SceneBuilder ● Propiedades ○ getBean() ○ getName() ○ get() y getValue() ○ bind() y unbind() ○ bindBidirectional() ○ Métodos específicos ■ not(), or(), and() ■ greaterThan(), lessThan(), isEqualTo() ■ concat()
  • 48. 3. SceneBuilder ● Binding ○ Enlace de valores de un control ○ Normalmente a través de propiedades ○ javafx.beans.binding.Bindings ■ Permite capturar la modificación de valores ■ Y operar con ellos ■ add(), subtract(), multiply(), divide(),... ■ getValue() ■ format() ■ Implementa el Patrón Chaining
  • 49. 3. SceneBuilder ● Binding ○ Ejemplo: Área de un triángulo
  • 50. 3. SceneBuilder ● Binding condicional ○ javafx.beans,bindings.When ○ Patrón Builder para condiciones ■ NumberConditionBuilder ■ BooleanConditionBuilder ■ StringConditionBuilder ■ ObjectConditionBuilder ○ Aplicado sobre un binding ○ Admite Patrón Chaining ■ new When().then().otherwise()
  • 51. 3. SceneBuilder ● Binding condicional ○ Ejemplo
  • 52. 3. SceneBuilder ● Ejercicio 7 ○ Crear un Stage ○ Con Text, CheckBox, TextField ○ Enlazados a las propiedades ■ x, y ■ width, height, área del Stage ■ focus ■ resizable ■ title ○ Centrar los controles mediante binding
  • 54. 4. Eventos, Manejadores y Filtros ● Eventos en JavaFX ○ Clasificados por tipo ○ Tienen un origen y un destinatario ■ Nodo seleccionado o en la posición marcada ○ Que puede recoger o no el evento ■ Fase de captura ■ Fase de Bubbling ○ Manejadores (Handlers) ○ Filtros (Filter) ○ Se puede consumir el evento ■ consume()
  • 55. 4. Eventos, Manejadores y Filtros ● Eventos en JavaFX
  • 56. 4. Eventos, Manejadores y Filtros ● Algunas Interfaces
  • 57. 4. Eventos, Manejadores y Filtros ● Observable ○ Permite registrar InvalidationListener ○ Disparado al cambiar el valor de una propiedad ○ O desde un objeto de binding ● ObservableValue ○ Permite registrar ChangeListener ○ Disparado al cambiar el valor de una propiedad ○ Lazy binding ● ReadOnlyProperty ○ Proporciona el getBean() y el getName()
  • 58. 4. Eventos, Manejadores y Filtros ● Filtros de Eventos ○ Disparados durante la captura ○ Registrables y eliminables de cualquier nodo ○ Se debe indicar el tipo de evento ■ Clase controladora EventHandler ■ Clase de evento EventType
  • 59. 4. Eventos, Manejadores y Filtros ● Manejadores de Eventos ○ Disparados durante el bubbling ○ Registrables y eliminables de cualquier nodo ○ Se debe indicar el tipo de evento ■ Clase controladora EventHandler ■ Clase de evento EventType
  • 60. 4. Eventos, Manejadores y Filtros ● Casos Particulares ○ Eventos Comunes ■ Mouse ■ Key ■ ContextMenu ■ Drag ○ Gestures ■ Scroll ■ Swipe ■ Touch ■ Rotate ■ Zoom
  • 61. 4. Eventos, Manejadores y Filtros ● Añadir eventos a una propiedad ○ addListener() ○ Tipo ChangeListener ○ Tipo InvalidationListener ○ removeListener() ● Añadir eventos a un nodo ○ addEventFilter() ○ addEventHandler() ○ Tipo EventHandler
  • 62. 4. Eventos, Manejadores y Filtros ● Ejercicio 8 ○ Añadir eventos a los ejercicios 6 y 7 ○ A través de propiedades ■ CheckBox de fullScreen ○ A través de EventHandler ■ Botones de cierre y toBack() ■ Eventos de ratón ■ Eventos de teclado
  • 63. 4. Eventos, Manejadores y Filtros ● Controles de Datos ○ ListView ○ TableView ○ TreeView ○ ChoiceBox ○ ComboBox ○ MenuBar?
  • 64. 4. Eventos, Manejadores y Filtros ● ObservableList ○ Construible mediante FXCollections ○ Lista de Objetos con eventos ■ Tipo Change ○ Añadible a un control de datos
  • 65. 4. Eventos, Manejadores y Filtros ● ObservableMap ○ Equivalente a ObservableList ○ Evento Change específico
  • 66. 4. Eventos, Manejadores y Filtros ● FXCollections ○ observableList(List<T>) ○ observableArrayList(T...) ○ concat(ObservableList<T>...) ○ synchronizedObservableList(ObservableList<T>) ○ observableMap(Map<K,V>) ○ observableHashMap() ○ sort(ObservableList<T>) ○ reverse(ObservableList<T>) ○ rotate(ObservableList<T>,int) ○ shuffle(ObservableList<T>) ○ ...
  • 67. 4. Eventos, Manejadores y Filtros ● ListView de objetos ○ Hay que componer cada item ○ setCellFactory(Callback) ○ Clase abstracta a implementar ■ Método call() que devuelve una casilla ■ ListCell<Persona> ● Clase abstracta a implementar ● Método updateItem() para mostrar valores ● Control de tipo Labeled ● Admite etiqueta y Tooltip
  • 68. 4. Eventos, Manejadores y Filtros ● ListView de objetos
  • 69. 4. Eventos, Manejadores y Filtros ● TableView de objetos ○ Hay que especificar cada columna ○ TableColumn<Objeto, String> ○ Y asociar la propiedad ○ setCellValueFactory(new PropertyValueFactory())
  • 70. 4. Eventos, Manejadores y Filtros ● TableView de objetos ○ Valores editables ■ setEditable() ■ setCellFactory() ■ setOnEditCommit()
  • 71. 4. Eventos, Manejadores y Filtros ● TableView de objetos ○ Valores editables NO TextField ■ setCellFactory() ■ Extender TableCell<Objeto, String>
  • 72. 4. Eventos, Manejadores y Filtros ● TableView de objetos ○ Clase TableCell<Objeto, String> ■ startEdit() ■ cancelEdit() ■ updateItem(String, boolean) ■ isEditing() ■ setText(String) ■ setGraphic(Node)
  • 73. 4. Eventos, Manejadores y Filtros ● Binding de Colecciones ○ Bindings.bindContentBidirectional( ObservableList<T>, ObservableList<T>); ○ Enlaza la lista ○ Responde a cambios en la lista ○ No en los items ○ Resetear el item modificado en su posición ■ listaObservable.set( tableView.getTablePosition().getRow(), item);
  • 74. 4. Eventos, Manejadores y Filtros ● Ejercicio 9 ○ Crear las clases Cliente, Pedido, Producto ○ Crear un formulario de datos ○ Enlazar las propiedades de un cliente ○ Crear eventos de compra de producto ■ ListView de Productos ○ Enlazar el precio final del pedido ■ Según el tipo de cliente (normal/vip)
  • 75. 4. Eventos, Manejadores y Filtros ● Eventos de tiempo
  • 76. 4. Eventos, Manejadores y Filtros ● Atajos de teclado ○ Aceleradores ■ Combinaciones de teclas ■ KeyCombination ● KeyCodeCombination, KeyCharacterCombination ■ Disparan el evento onAction ○ Mnemonicos ■ Alt+Tecla ■ Poner un underscore _ ■ setMnemonicParsing(true) ■ Acceden al nodo
  • 78. 5. Estilos CSS ● JavaFX utiliza CSS para el aspecto de los controles y escenas
  • 79. 5. Estilos CSS ● ¿Qué es CSS? ○ Cascade StyleSheet ○ Clase (selector) y reglas de aspecto
  • 80. 5. Estilos CSS ● Estilos por defecto ○ caspian.css ○ com/sun/javafx/scene/control/skin/caspian ○ Selectores ■ root ■ label, button, toggle-button, radio, check-box, hyperlink, menu, context-menu, choice-box,... ■ :disabled, :hover, :focused, :default, :armed, : selected, :visited, :showing, :filled,...
  • 81. 5. Estilos CSS ● Estilos por defecto ○ caspian.css ○ com/sun/javafx/scene/control/skin/caspian ○ Reglas de aspecto ■ -fx-* ■ background, color, disabled-color, dark-text-color, stroke, disabled-opacity, padding, font, effect,...
  • 82. 5. Estilos CSS ● Estilos por defecto ○ Funciones sobre estilos ■ derive() hace un estilo más claro/oscuro ■ ladder() hace una escala de colores ■ linear-gradient() ■ radial-gradient() ■ rgba() ○ Funciones de efectos ■ dropshadow() ■ innershadow()
  • 83. 5. Estilos CSS ● Estilos personalizados ○ Añadir el CSS a la escena a. scene.getStylesheets().add("miCSS.css"); b. SceneBuilder.create() .stylesheets(Ventana.class .getResource("miCSS.css") .toExternalForm())
  • 84. 5. Estilos CSS ● Estilos personalizados ○ Formatos del CSS a. .button{} b. .miClaseBoton{} c. #miSelectorBoton{} ○ ¿Cómo se aplica? a. Por defecto b. getStyleClass().add("miClaseBoton") c. setId("miSelectoBoton") d. setStyle("-fx-background-color: #373737;")
  • 85. 5. Estilos CSS ● Limitaciones ○ NO se admiten relaciones XPath ■ :fist-child,:after, :before, :lang, :active, :focus, ... ○ NO se admiten varios Font ■ Arial, Verdana, Courier; ○ Cada control sólo admite una clase CSS ■ Suplanta a la anterior ■ Usar selectores por ID
  • 86. 5. Estilos CSS ● Ejercicio 10 ○ Aplicar un estilo "hardcoded" a un control ○ Crear un CSS de estilos sobrecargados ○ Crear un CSS de estilos personalizados ■ Modo clase ■ Modo selector
  • 87. 5. Estilos CSS ● CSS compilado ○ Formato binario BSS ○ Mejora el rendimiento ○ Para ficheros CSS grandes ○ Cargar el fichero BSS en lugar del CSS
  • 89. 6. Contenido HTML ● JavaFX soporta HTML5 ● El motor de renderizado HTML es Webkit ○ Chrome ○ Safari ● Controles de Navegador ○ WebView ○ WebEngine
  • 90. 6. Contenido HTML ● javafx.scene.web.WebEngine ○ Motor HTML ○ NO visual ○ Carga páginas en background ○ Genera y ejecuta su ■ DOM ■ CSS ■ JavaScript ○ Permite interactuar con su contenido ■ Callbacks ■ Document ■ Mapeo de Objetos
  • 91. 6. Contenido HTML ● Callbacks ○ Eventos asociados a JavaScript JavaScript WebEngine window.alert() onAlert window.confirm() confirmHandler window.open() createPopupHandler window.open() onVisibilityChanged window.close() window.prompt() promptHandler
  • 92. 6. Contenido HTML ● Callbacks ○ Ejecución de Scripts ■ executeScript() ○ Ejecución "desde" Scripts ■ Un JS invoca a un método (público) de Java ■ JSObject
  • 93. 6. Contenido HTML ● Document ○ Modelo de representación de DOM ○ getDocument() ○ getElementById() ○ Element ○ EventTarget
  • 94. 6. Contenido HTML ● Mapeo de Objetos ○ JS a Java ■ netscape.javascript.JSObject ■ JSObject jdoc = (JSObject) webEngine.getDocument(); ■ JSObject window = (JSObject) webEngine.executeScript ("window"); ○ Java a JS ■ call() ■ eval() ■ getMember() ■ setMember()
  • 95. 6. Contenido HTML ● javafx.scene.web.WebView ○ Nodo que gestiona un WebEngine ○ Y muestra su contenido ○ Gestiona el scroll ○ Gestiona eventos ■ Ratón ■ Teclado
  • 96. 6. Contenido HTML ● Ejercicio 11 ○ Conectar con Google ○ Añadir un Text que muestre la búsqueda ■ A mi escena ○ Ocultar el botón "Buscar con Google"
  • 98. 7. Aplicaciones Multipantalla ● Tipos de multipantalla ○ Preloader ○ Diálogos ○ Popups ○ Ventanas Modales ○ Abrir/Cerrar ○ Interactivas
  • 99. 7. Aplicaciones Multipantalla ● Preloader ○ Ventana de carga ○ Con una barra de progreso ○ Asociada a un Stage en construcción ○ Extender javafx.application.Preloader ○ Se ejecuta con un Application ○ notifyPreloader() ○ Proceso de background ■ javafx.concurrency.Task
  • 101. 7. Aplicaciones Multipantalla ● Ventanas Emergentes ○ Popups ○ Clase específica que hereda Stage ○ Con la ventana principal como Owner
  • 102. 7. Aplicaciones Multipantalla ● Dialogos ○ Ventanas emergentes modales ○ Respuesta opcional (YES/NO/CANCEL) ○ No hay clases diálogo específicas ○ Opción ■ Librería https://github.com/hecklerm/DialogFX ■ Anton Smirnov ■ DialogFX ■ showDialog() ■ Type ● QUESTION, ACCEPT, INFO, ERROR
  • 103. 7. Aplicaciones Multipantalla ● Ejercicio 12 ○ Crear una ventana emergente para ocultar la escena ○ O volver a mostrarla
  • 104. 7. Aplicaciones Multipantalla ● Ventanas Interactivas ○ Son objetos de Java ○ Utilizamos propiedades ○ O campos estáticos ○ Se puede hacer binding ○ PERO ■ No perder de vista QUIÉN es la ventana PADRE
  • 105. 7. Aplicaciones Multipantalla ● Múltiples escenas en un Stage ○ Opción 1: StackPane ■ Pros ● Fácil de diseñar ● Fácil de ejecutar ● Cambiar el panel que está encima ■ Contras ● Consume recursos ● La escena es grande ● La mayoría de controles no se utilizan
  • 106. 7. Aplicaciones Multipantalla ● Múltiples escenas en un Stage ○ Opción 2: Cambiar el árbol de nodos ■ Pros ● Consume los recursos necesarios ● Puedo mantener escenas simples ● Como FXML separados ■ Contras ● Requiere más programación ● Se nota el cambio de nodos ● Hay que cargar cada FXML
  • 107. 7. Aplicaciones Multipantalla ● Múltiples escenas en un Stage ○ Solución de compromiso ■ Usar StackPane como soporte ■ Cambiar el árbol de nodos ■ Con efectos de transición ● fade ● translate ● ... ■ Los eventos disparan el cambio de escena
  • 108. 7. Aplicaciones Multipantalla ● Múltiples escenas en un Stage ○ Solución de compromiso 1. Extender StackPane 2. Almacenar los distintos árboles de nodos 3. Implementar el cambio de pantalla ● Timeline 4. Implementar la eliminación de la escena ● EventHandler<ActionEvent>
  • 109. 7. Aplicaciones Multipantalla ● Múltiples escenas en un Stage ○ Evento de fadeOut
  • 110. 7. Aplicaciones Multipantalla ● Múltiples escenas en un Stage ○ Cambio de escena y evento de fadeIn
  • 111. 7. Aplicaciones Multipantalla ● Dispositivos móviles ○ Tamaño reducido ○ Memoria y procesador reducidos ○ TouchScreen ○ DESLIZAR ○ Truco ■ Usar una imagen de fondo ■ Suficientemente grande ■ Y desplazar el clip() o un panel...
  • 113. 7. Aplicaciones Multipantalla ● Consideraciones de rendimiento ○ Es importante un Scene pequeño ○ Es importante que la navegación sea fácil ○ Es importante que cada ventana tenga sus eventos ○ Se puede usar StackPane ○ Pero con cuidado
  • 115. 8. Threads ● Clase javafx.application.Application ○ Gestiona el hilo de ejecución de JavaFX ○ launch(Application, args) ○ init() ○ start(Stage) ○ stop() ○ getParameters() ● Clase javafx.application.Platform ○ Gestiona la ejecución de hilos JavaFX ○ exit() ○ setImplicitExit() ○ runLater()
  • 116. 8. Threads ● Worker ○ Interfaz javafx.concurrent.Worker ○ Hilo que ejecuta un JavaFX Application ○ No bloquea la plataforma ○ Gestiona eventos de ejecución ■ runLater() ○ Es cancelable ○ Almacena ■ Estado de la tarea ■ Cantidad de trabajo realizada ■ Resultado de la tarea ■ Información descriptiva
  • 117. 8. Threads ● Clase javafx.concurrent.Task<T> ○ Implementa la interfaz Worker ○ Pero es abstracta ○ Hay que definir el método call()
  • 118. 8. Threads ● Ejercicio 13 ○ Crear una ventana que simule una tarea lenta ○ Actualizando un ProgressBar ○ Enlazando sus propiedades ○ Haciendo la tarea cancelable
  • 119. 8. Threads ● Clase javafx.concurrent.Service<T> ○ Implementación reutilizable de Worker ○ Permite resetear el estado de un Worker ■ reset() ■ restart() ○ También es abstracta ○ Hay que implementar el método createTast() ○ Que devuelve un Task<T>
  • 120. JavaFX 9. Empaquetado y Despliegue
  • 121. 9. Empaquetado y Despliegue ● El empaquetado es esencial ○ Para que la app sea ejecutable ○ En distintos entornos (Escritorio, Web, Movil) ● Empaquetar a mano es complicado ● Herramienta JavaFX Packaging Tools ○ Garantiza que contiene las librerías de FX ○ Permite descargar dependencias ○ Ofrece al usuario información visual ○ Instalador o app autocontenida ○ javafxpackager
  • 122. 9. Empaquetado y Despliegue ● Proceso de empaquetado
  • 123. 9. Empaquetado y Despliegue ● Formatos de empaquetado ○ Standalone ■ Generado por defecto ■ Ejecutado desde JVM ○ Autocontenido ■ Con una JVM embebida ■ Opción de instalador específico ○ Aplicación WebStart ○ Aplicación embebida en Web ■ Ejecutada como Applet ■ Configurada mediante JavaScript ■ Plantilla HTML
  • 124. 9. Empaquetado y Despliegue ● Ejemplo de paquete Web ○ JAR ejecutable con la aplicación ○ HTML con un JavaScript para lanzarla ○ Deployment Descriptor JNLP ○ Otros JAR y recursos
  • 125. 9. Empaquetado y Despliegue ● Opciones de empaquetado ○ Codificar las CSS ■ Mejora el rendimiento ■ Para ficheros CSS grandes ■ BSS ○ Firmar el empaquetado ○ Configurar el Deployment Descriptor ■ Tamaño preferido del Stage ■ Requisitos de plataforma y opciones JVM ■ Permisos requeridos ■ ... ○ Plantilla HTML
  • 126. 9. Empaquetado y Despliegue ● ¿Cómo Empaquetar? ○ NetBeans ■ Muchas configuraciones automáticas ■ En las propiedades del proyecto ○ Ant ■ Tareas específicas ■ <fx:*> ○ javafxpackager ■ Comando de consola ■ Modificadores de configuración
  • 128. 9. Empaquetado y Despliegue ● Ant ○ JDK 7 ○ ant-javafx.jar ○ Tareas proporcionadas ■ Crear JARs ejecutables ■ Crear HTML y JNLP para Web y WebStart ■ Firmar JARs ■ Compilar CSS ■ Empaquetar aplicaciones autocontenidas ● nativeBundles="image" ● nativeBundles="installer" ● nativeBundles="all"
  • 129. 9. Empaquetado y Despliegue ● Ant ○ build.xml
  • 130. 9. Empaquetado y Despliegue ● javafxpackager ○ -createbss ○ -createjar ○ -deploy (app standalone) ○ -deploy -native ○ -makeall (createjar + deploy) ○ -signJar ○ -outdir ○ -srcdir ○ ...
  • 131. 9. Empaquetado y Despliegue ● Aplicación autocontenida ○ Sólo JDK 7u6 ○ Pros ■ Se controla la JVM (no es necesario tenerla) ■ Se muestra un instalador ■ No se requieren privilegios de administrador ○ Contras ■ Exige descargar partes de la app ■ Versiones distintas para cada entorno ■ Hay que gestionar las actualizaciones
  • 132. 9. Empaquetado y Despliegue ● Aplicación autocontenida ○ Configuración por Ant ○ nativeBundles en <fx:deploy> ■ image ■ exe ■ msi ■ dmg ■ rpm ■ deb ○ Requieren herramientas de terceros ■ InnoSetup, WiX, RPM Builder,...
  • 133. 9. Empaquetado y Despliegue ● Despliegue en Navegador ○ Libería Deployment Toolkit ○ http://java.com/js/dtjava.js ○ Genera JavaScript ○ Detecta el runtime ○ Descarga dependencias ○ Informa al usuario ○ Ant <fx:deploy>
  • 134. 9. Empaquetado y Despliegue ● Despliegue en Navegador ○ Admite eventos ■ onGetSplash ■ onDeployError ■ ... ○ Admite paso de parámetros ○ Permite acceder a código JavaFX ■ Configurar un id al crear la dtjava.App ■ document.getElementById(id) ■ Ejecutar un método público
  • 135. 9. Empaquetado y Despliegue ● Plantilla HTML ○ #DT.SCRIPT.ULR# ○ #DT.EMBED.CODE.ONLOAD(idDeLaApp)# ○ ZZZ es el placeholder de dtjava ○ Configurable con Ant <fx:template>
  • 137. JavaFX 10. Gráficos y Multimedia
  • 138. 10. Gráficos y Multimedia ● JavaFX integra controles para ○ Formas ○ Charts ○ Imágenes ○ Videos ○ Audio ● Se insertan como controles normales
  • 139. 10. Gráficos y Multimedia ● Formas ○ javafx.scene.shape.* ■ Líneas ● Arc, Line, Polyline, CubicCurve, QuadCurve, Path, MoveTo ■ Figuras geométricas ● Circle, Ellipse, Polygon, Rectangle ■ Otros ● SVGPath, Text
  • 140. 10. Gráficos y Multimedia ● Charts ○ javafx.scene.chart.* ○ 3 partes ■ Título ■ Leyenda ■ Contenido ○ Usan datos de tipo ObservableList<T>
  • 141. 10. Gráficos y Multimedia ● Charts ○ PieChart ■ ObservableList<PieChart.Data> ■ new PieChart.Data("etiqueta", valor%)
  • 142. 10. Gráficos y Multimedia ● Charts ○ ScatterChart y LineChart ■ ObservableList<XYChart.Series<X,Y>> ■ new Series<Integer, Double>() ■ new XYChart.Data(x, y)
  • 143. 10. Gráficos y Multimedia ● Imágenes ○ Control ImageView ○ Utiliza un objeto javafx.scene.image.Image ○ Construible con una URL
  • 144. 10. Gráficos y Multimedia ● Audio y video ○ Framework de reproducción multimedia ○ javafx.scene.media.* ○ Clase Media ■ Construye un objeto multimedia ■ A partir de un recurso cargado por path ○ Clase MediaPlayer ■ Reproduce objetos Media ■ play(), pause(), stop(), seek(),... ○ Clase MediaView ■ Nodo que muestra un Media reproducido por un MediaPlayer
  • 145. 10. Gráficos y Multimedia ● Audio y video
  • 146. 10. Gráficos y Multimedia ● Audio ○ Soporta MP3, WAV, AIFF y AAC ○ Clase AudioClip ■ Para ficheros pequeños ■ < 100KB
  • 147. 10. Gráficos y Multimedia ● Audio ○ Utilizando el framework de multimedia ○ Admite metadatos del contenido
  • 148. 10. Gráficos y Multimedia ● Video ○ Formato de video nativo FXM ○ Similar a Flash Video FLV ○ Requiere un MediaView ■ Admite ViewPort
  • 149. 10. Gráficos y Multimedia ● Video ○ Se pueden poner Markers al Media ○ Y gestionarlos desde el MediaPayer