JFo 9 1 SG Esp
JFo 9 1 SG Esp
JFo 9 1 SG Esp
Java Foundations
9-1
Introducción a JavaFX
Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 2
2
Objetivos
• En esta lección se abordan los siguientes objetivos:
−Crear un proyecto JavaFX
−Explicar los componentes del proyecto JavaFX
por defecto
−Describir los diferentes tipos de nodos y paneles
−Explicar el gráfico de escenas, el nodo raíz, las escenas
y las etapas
JFo 9-1
Introducción a JavaFX Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 3
3
Temas
• Usuarios
• Creación de un programa JavaFX
• El nodo raíz
• El gráfico de escenas, la escena y la etapa
JFo 9-1
Introducción a JavaFX Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 4
4
¡Están a punto de llegar
los exámenes finales!
• Estudiar es importante
• ¿Quiere estudiar con un amigo?
−¿Pero sus amigos viven en otras residencias?
−¿Cuál es el mejor lugar para encontrarse?
−¿Cuál es el punto más céntrico del campus?
Gracias por
recordármelo...
JFo 9-1
Introducción a JavaFX Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 5
5
JavaFX puede ayudarle
• JavaFX se utiliza para crear aplicaciones de GUI
• GUI: Interfaz gráfica de usuario
• Una aplicación de GUI nos permite ver la respuesta en
un mapa
JFo 9-1
Introducción a JavaFX Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 6
6
Ejercicio 1
• Ejecute CampusMap.jar
• Alinee cada cuadrado con la residencia correcta
en el mapa
• Estime y ajuste la población de cada residencia
−Haga clic y arrastre el texto debajo de cada cuadrado
• Observe los cambios en los siguientes puntos
centrales:
−Todos los estudiantes en todas las residencias
−Un grupo de estudio de tres amigos que viven en las
residencias 1, 2 y 4
JFo 9-1
Introducción a JavaFX Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 7
7
Pero, ¡este no es mi campus!
• Tienes razón
• Sería mejor si la escuela utilizara el programa...
−Mapa del campus
−Nombre de las residencias
−Población de las residencias
−Y su grupo de amigos
• Este es el juego de problemas de la sección En la
sección 9 se explica todo lo que necesitará para volver
a crear el programa
JFo 9-1
Introducción a JavaFX Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 8
Java Puzzle Ball es también una aplicación JavaFX, pero se tardaría demasiado en volverla a
crear.
8
Temas
• Usuarios
• Creación de un programa JavaFX
• El nodo raíz
• El gráfico de escenas, la escena y la etapa
JFo 9-1
Introducción a JavaFX Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 9
9
Cómo crear un programa JavaFX
• En NetBeans, haga clic en el botón New Project ( )
• Seleccione JavaFX para la categoría y JavaFX
Application para el proyecto y, a continuación, haga clic
en Next
• Continúe como si estuviera creando otro proyecto Java
JFo 9-1
Introducción a JavaFX Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 10
10
Ejercicio 2
• Cree un proyecto JavaFX
−Java debe proporcionarle un programa por defecto
JFo 9-1
Introducción a JavaFX Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 11
11
Proyecto JavaFX por defecto
public class JavaFXTest extends Application {
@Override
public void start(Stage primaryStage) {
Button btn = new Button();
btn.setText("Say 'Hello World'");
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("Hello World!");
}
});
JavaFX debe haberle proporcionado un programa similar a este. Observaremos con atención los
componentes de este código.
12
Proyecto JavaFX por defecto
… continued
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}//end method start
JFo 9-1
Introducción a JavaFX Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 13
JavaFX debe haberle proporcionado un programa similar a este. Observaremos con atención los
componentes de este código.
13
Dos métodos: start() y main()
• start() es el punto de entrada para todas las
aplicaciones JavaFX
−Se puede considerar como el método main para JavaFX
public void start(Stage primaryStage) {
…
}//end method start
JFo 9-1
Introducción a JavaFX Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 14
A pesar de que los programas JavaFX necesitan un método main, es posible empaquetar
algunas aplicaciones JavaFX con un iniciador, de manera que no se necesita un método main.
14
Los botones son objetos
• Los botones son como cualquier otro objeto
−Se pueden instanciar
−Contienen campos
−Contienen métodos
public void start(Stage primaryStage) {
Button btn = new Button();
btn.setText("Say 'Hello World'");
…
}//end method start
JFo 9-1
Introducción a JavaFX Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 15
15
Los botones son nodos
• Algunos de estos campos y métodos están diseñados
para almacenar y manipular propiedades visuales:
−btn.getText()
−btn.setMinHeight()
−btn.setLayoutX() //set x position
−btn.setLayoutY() //set y position
−btn.isPressed() //is it pressed?
JFo 9-1
Introducción a JavaFX Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 16
16
Nodos
• Existen muchos tipos de nodos JavaFX:
PieChart
Button Rectangle
JFo 9-1
Introducción a JavaFX Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 17
17
Interacción de nodo
• Esto ayuda a manejar la interacción del botón:
public void start(Stage primaryStage) {
…
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("Hello World!");
}//end method handle
});//end setOnAction
…
}//end method start
• Se denomina "clase interna anónima"
− ¿La sintaxis no parece un lío?
− Las expresiones Lambda Java SE 8 son una alternativa elegante
− Trataremos las expresiones Lambda más adelante en esta sección
JFo 9-1
Introducción a JavaFX Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 18
18
Temas
• Usuarios
• Creación de un programa JavaFX
• El nodo raíz
• El gráfico de escenas, la escena y la etapa
JFo 9-1
Introducción a JavaFX Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 19
19
Creación de nodos
• Los nodos se instancian como cualquier otro objeto
Java:void start(Stage primaryStage) {
public
Button btn1 = new Button();
Button btn2 = new Button();
btn1.setText("Say 'Hello World'");
btn2.setText("222");
…
}//end method start
JFo 9-1
Introducción a JavaFX Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 20
20
Muestra de nodos
• Hay algunos pasos para mostrar un nodo
public void start(Stage primaryStage) {
Button btn1 = new Button();
Button btn2 = new Button();
btn.setText("Say 'Hello World'");
btn.setText("222");
StackPane root = new StackPane();
root.getChildren().add(btn1);
root.getChildren().add(btn2);
…
}//end method start
JFo 9-1
Introducción a JavaFX Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 21
21
Adición de nodos al nodo raíz
• Puede agregar cada nodo por separado:
root.getChildren().add(btn1);
root.getChildren().add(btn2);
root.getChildren().add(btn3);
JFo 9-1
Introducción a JavaFX Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 22
22
Adición de nodos al nodo raíz
• Pero no agregue el mismo nodo más de una vez
−Causa un error del compilador:
root.getChildren().add(btn1);
root.getChildren().add(btn1);
JFo 9-1
Introducción a JavaFX Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 23
23
Nodo raíz StackPane
• El nodo raíz de este ejemplo es un StackPane
StackPane root = new StackPane();
root.getChildren().addAll(btn1, btn2);
−El StackPane apila los nodos uno por encima de otro
−Pero los botones pequeños podrían volverse ocultos e
inaccesibles
JFo 9-1
Introducción a JavaFX Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 24
24
Los paneles como nodos Raíz
• Cada panel determina el diseño de los nodos
JFo 9-1
Introducción a JavaFX Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 25
25
Programación de distintos paneles como nodos raíz
• Diseñar el nodo raíz como un panel diferente es fácil
• Solo tiene que especificar un tipo de referencia y un
tipo de objeto distintos
JFo 9-1
Introducción a JavaFX Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 26
26
Ejercicio 3
• Edite el proyecto JavaFX actual
−Vamos a experimentar un poco
• Después de agregar un botón al nodo raíz, pruebe a
cambiar su posición
− btn1.setLayoutY(100);
• ¿La posición de un botón cambiará si el nodo raíz no
era un StackPane? Pruebe estas alternativas:
−TilePane
−VBox
−Group
JFo 9-1
Introducción a JavaFX Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 27
27
Nodos raíz Group
• Un Group permite colocar los nodos en cualquier lugar
Group root = new Group();
root.getChildren().addAll(btn1, btn2);
btn1.setLayoutY(100);
JFo 9-1
Introducción a JavaFX Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 28
28
Un grupo puede contener un panel
• Los paneles también son nodos
−Cualquier nodo se puede agregar al nodo raíz
JFo 9-1
Introducción a JavaFX Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 29
29
Ejercicio 4
• Edite el proyecto JavaFX actual
−Es el momento de experimentar más
JFo 9-1
Introducción a JavaFX Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 30
30
Temas
• Usuarios
• Creación de un programa JavaFX
• El nodo raíz
• El gráfico de escenas, la escena y la etapa
JFo 9-1
Introducción a JavaFX Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 31
31
El gráfico de escenas JavaFX
• Cómo decidir que los nodos agregados se pueden
dibujar como un gráfico de escenas
−El nodo raíz contiene un Hbox
−El HBox actúa como un contenedor para los botones
Group
Root Node
HBox
JFo 9-1
Introducción a JavaFX Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 32
Nota para los instructores: Los gráficos en estas dos diapositivas deben estar en la misma
posición.
32
El gráfico de escenas
• El HBox mantiene la GUI organizada y colocada en el
lugar apropiado
• El resto de la ventana se puede utilizar para otros
nodos
Group
Root Node
JFo 9-1
Introducción a JavaFX Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 33
Nota para los instructores: Los gráficos en estas dos diapositivas deben estar en la misma
posición.
33
La escena y la etapa
• Si observamos el resto del programa JavaFX por
defecto, vemos dos cosas más:
• Una escena (que contiene el nodo raíz)
• Una etapa (que contiene la escena)
public void start(Stage primaryStage) {
…
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}//end method start
JFo 9-1
Introducción a JavaFX Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 34
34
¿Qué es la escena?
• Hay algunas propiedades importantes que describen
una Scene:
• Gráfico de escenas
− La Scene es el contenedor para todo el contenido en el gráfico de
escenas JavaFX
• Size
− La anchura y la altura de la Scene se pueden definir
• antecedentes
− El fondo se puede establecer como un Color o una imagen de
fondo
• Información del cursor
− La Scene puede detectar los eventos del mouse y manejar las
propiedades del cursor.
Scene scene = new Scene(root, 300, 250, Color.BLACK);
JFo 9-1
Introducción a JavaFX Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 35
35
¿Qué es la etapa?
• Considere la etapa como la ventana de la aplicación
JFo 9-1
Introducción a JavaFX Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 36
36
Animación de jerarquía
• Una etapa es un contenedor de nivel superior
• Una etapa contiene una escena
• Una escena contiene un nodo raíz
• El nodo raíz contiene otros nodos
Stage
Scene
Root Node
Node Node
Node
JFo 9-1
Introducción a JavaFX Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 37
37
Varias escenas, una etapa
• Es posible intercambiar cualquier escena en una sola
etapa
JFo 9-1
Introducción a JavaFX Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 38
En Java Puzzle Ball utilizamos una sola etapa. Si hubiésemos utilizado varias etapas, sería un lío
ver como las ventanas se abren y se cierran al desplazarse por los menús.
38
Varias escenas, varias etapas
• También se pueden crear varias etapas
JFo 9-1
Introducción a JavaFX Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 39
Normalmente se realiza con las herramientas. Pero no tanto con los juegos.
39
Resumen
• En esta lección se abordan los siguientes objetivos:
−Crear un proyecto JavaFX
−Explicar los componentes del proyecto JavaFX por defecto
−Describir los diferentes tipos de nodos y paneles
−Explicar el gráfico de escenas, el nodo raíz, las escenas y las
etapas
JFo 9-1
Introducción a JavaFX Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 40
40
41