Introducción a JavaFX: Fundamentos y OOP
Introducción a JavaFX: Fundamentos y OOP
JavaFX Basico
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
1
Motivaciones
JavaFX es un nuevo marco para desarrollar programas de
GUI de Java. La API de JavaFX es un excelente ejemplo
de cómo se aplica el principio orientado a objetos.
Este capítulo tiene dos propósitos.
Primero,presentar los conceptos básicos de la programación
de JavaFX.
Segundo, usar JavaFX para demostrar OOP.
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
2
Objetivos
Distinguir entre JavaFX, Swing y AWT.
Escribir un programa JavaFX simple y comprender la relación entre Escenario,
Escenas y nodos .
Crear interfaces de usuario utilizando paneles, controles de interfaz de usuario y
formas.
Usar propiedades de enlace para sincronizar valores de propiedad.
Usar las propiedades comunes style y rotate para nodos.
Crear colores usando la clase Color.
Crear fuentes usando la clase Font.
Crear imágenes usando la clase de Image y crear vistas de imagen usando la clase
ImageView.
Diseñar nodos usando Pane, StackPane, FlowPane, GridPane, BorderPane,
HBox y VBox.
Mostrar texto usando la clase de Text y crear formas usando Line, Círcle,
Rectangle, Ellipse, Arc, Polygon y Polyline.
Desarrollar los componentes GUI reutilizables ClockPane para visualizar un reloj
analógico.
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
3
JavaFX vs Swing y AWT
Swing y AWT han sido reemplazados por la plataforma JavaFX
para desarrollar aplicaciones “ricas” de Internet.
Cuando se introdujo Java, las clases de GUI se incluyeron en una
biblioteca conocida como Abstract Windows Toolkit (AWT).
AWT está bien para desarrollar interfaces gráficas simples de
usuario, pero no para desarrollar proyectos integrales de GUI.
Además, AWT es propenso a errores específicos de la plataforma.
Los componentes de interfaz de usuario AWT fueron
reemplazados por una biblioteca más robusta, versátil y flexible
conocida como componentes Swing. Los componentes Swing
están pintados directamente en lienzos usando código Java. Los
componentes Swing dependen menos de la plataforma de destino
y usan menos del recurso GUI nativo. Con el lanzamiento de Java
8, Swing es reemplazado por una plataforma de GUI
completamente nueva conocida como JavaFX.
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
4
Estructura Basica de JavaFX
Extender/heredar Application
Sobreescribir el método start(Stage)
Stage, Scene, and Nodes
JavaFX usa la analogía del teatro con la gestión gráfica.
Stage Podemos pensar en el escenario como la plataforma
Scene para admitir escenas y nodos como actores para actuar
en las escenas.
Podemos crear escenarios ( ventanas) adicionales si es
Button necesario.
Por defecto, el usuario puede cambiar el tamaño del
Escenario. Para evitar que el usuario cambie el tamaño
del Escenario, invoque [Link] (false).
MyJavaFX MultipleStageDemo
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
5
Paneles, Controles UI, y formas
En los programas anteriores el botón está Las formas como Línea, Círculo
Elipse, Rectángulo, Ruta,
centrado en la escena y ocupa toda la ventana
Polígono, Polilínea y Texto son
sin importar cómo cambie de tamaño. subclases de Shape (forma).
Podemos cambiar esto estableciendo las
propiedades de posición y tamaño de un botón. Para mostrar una imagen.
Sin embargo, un mejor enfoque es utilizar clases Los controles de interfaz de
contenedor, llamadas panes (paneles), para usuario como Label, TextField,
disponer automáticamente los nodos en una Button, CheckBox, RadioButton
y TextArea son subclases de
ubicación y tamaño deseados. Control.
Coloca nodos dentro de un panel y luego coloca
el panel en una escena.
Un nodo es un componente visual como una
forma, una vista de imagen, un control de UI o un
panel.
ButtonInPane
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
6
Mostrar una forma
Este ejemplo muestra un círculo en el centro del panel.
x
Eje Y
(0, 0) Eje X
y
(x, y)
(0, 0) Eje X
Sistema de Sistema de
coordenadas coordenadas
Java Conventional
Eje Y
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
8
Enlazando Propiedades
El método bind (vinculacion) se define en la interfaz
[Link].
Una propiedad enlazada es una instancia de [Link].
Un objeto fuente es una instancia de la interfaz
[Link].
Un ObservableValue es una entidad que envuelve un valor y permite
observar el valor de los cambios.
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
10
Enlace Uni/Bidireccional
BindingDemo
BidirectionalBindingDemo
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
11
Propiedades y métodos comunes
para los nodos
style: establece un estilo CSS a JavaFX
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
14
La Clase Font
Los métodos getter para valores property se
proporcionan en la clase, pero se omiten en
el diagrama UML para abreviar.
FontDemo
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
15
La Clase Image
Crea una imagen con contenidos cargados desde un archivo o una URL.
La clase [Link] representa una imagen gráfica y se utiliza para cargar una
imagen desde un nombre de archivo especificado o una URL. Por ejemplo,
new Image("image/[Link]") crea un objeto Image para el archivo de imagen [Link] en el directorio
image y
new Image("[Link] crea un objeto Imagen para el
archivo de imagen en la URL en la Web.
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
16
La Clase ImageView
Los métodos getter y setter para valores property y getter
para property propio se proporcionan en la clase, pero se
omiten en el diagrama UML para abreviar.
Crea un ImageView.
Crea un ImageView con la imagen especificada.
Crea un ImageView con la imagen cargada desde el archivo o URL especificado
BorderPane Coloca los nodos en las regiones superior, derecha, inferior, izquierda y
central.
Hbox Coloca los nodos en una sola fila.
MultipleStageDemo
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
20
GridPane
Un objeto GridPane organiza los nodos en una
formación de cuadrícula (matriz). Los nodos se
colocan en los índices de columna y fila especificados.
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
GridPane ShowGridPane
Crea un GridPane.
Agrega un nodo a la columna y fila especificadas.
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
22
BorderPane
Los métodos getter y setter para valores property y getter para
property propio se proporcionan en la clase, pero se omiten en el
diagrama UML para abreviar.
Crea un BorderPane.
Establece la alineación del nodo en el BorderPane.
ShowBorderPane
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
23 Run
rights reserved.
HBox
Los métodos getter y setter para valores property y getter para
property propio se proporcionan en la clase, pero se omiten en el
diagrama UML para abreviar.
ShowHBoxVBox
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
25
La clase Shape
JavaFX proporciona muchas clases de formas (shape) para
dibujar textos, líneas, círculos, rectángulos, elipses, arcos,
polígonos y polilíneas.
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
26
La clase Text
Los métodos getter y setter para valores property y getter para
property propio se proporcionan en la clase, pero se omiten en el
diagrama UML para abreviar.
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
27
Texto - Ejemplo
ShowText Run
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
28
La clase Line
Los métodos getter y setter para valores de propiedad y getter
para la propiedad en sí se proporcionan en la clase, pero se
omiten en el diagrama UML para abreviar.
ShowLine Run
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
29
La clase Rectangle
Un rectángulo está definido por los parámetros x, y, ancho, alto, arcWidth y
arcHeight. El punto de la esquina superior izquierda del rectángulo está en (x, y) y el
parámetro aw (ancho del arco) es el diámetro horizontal de los arcos en la esquina, y
ah (arcoAltura) es el diámetro vertical de los arcos en la esquina. La clase Rectangle
define un rectángulo.
Los métodos getter y setter para valores property y getter para
property propio se proporcionan en la clase, pero se omiten en el
diagrama UML para abreviar.
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
30
Rectángulo - Ejemplo
ShowRectangle Run
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
31
La clase Círcle
Los métodos getter y setter para valores property y getter para
property propio se proporcionan en la clase, pero se omiten en el
diagrama UML para abreviar.
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
32
La clase Ellipse
Los métodos getter y setter para valores property y getter para
property propio se proporcionan en la clase, pero se omiten en el
diagrama UML para abreviar.
ShowEllipse Run
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
33
La clase Arc
Los métodos getter y setter para valores property y getter para
property propio se proporcionan en la clase, pero se omiten en el
diagrama UML para abreviar.
Un arco se concibe como parte de una elipse, definida por los parámetros centerX, centerY, radiusX,
radiusY, startAngle, length y un tipo de arco ([Link], ArcType .CHORD o [Link]). El
parámetro startAngle es el ángulo inicial; y la longitud es el ángulo de expansión (es decir, el ángulo
cubierto por el arco). Los ángulos se miden en grados y siguen las convenciones matemáticas habituales (es
decir, 0 grados es en dirección este y ángulos positivos indican rotación en sentido antihorario desde
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
dirección este), como se muestra en la figura siguiente. La clase Arc define un arco
rights reserved.
34
Arco - Ejemplos
radiusY length
startAngle
0 degree
radiusX
(centerX, centerY)
–30° –50°
–20° 20°
(a) Negative starting angle –30° and (b) Negative starting angle –50°
negative spanning angle –20° and positive spanning angle 20°
ShowArc Run
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
35
Las clases Polygon and Polyline
La clase Polygon define un polígono que conecta una secuencia de
puntos, como se muestra en la Figura (a). La clase Polyline es
similar a la clase Polygon, excepto que la clase Polyline no se cierra
automáticamente, como se muestra en la figura (b).
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
36
La clase Polygon
Los métodos getter y setter para valores property y getter para
property propio se proporcionan en la clase, pero se omiten en el
diagrama UML para abreviar.
[Link]
ShowPolygon Run
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
37
Caso Práctico: La Clase ClockPane
Este caso práctico desarrolla una clase que muestra un
reloj en un panel
ClockPane
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
38
Uso de la Clase ClockPane
DisplayClock Run
Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All
rights reserved.
39