2 Nodes¶
Introducción¶
En JavaFX, un Node
es la clase base para todos los objetos que pueden aparecer en la escena (escenario). La jerarquía de nodos es fundamental para construir la interfaz gráfica de usuario (GUI). Los nodos pueden ser visuales, como controles (botones, etiquetas, campos de texto), o contenedores que organizan otros nodos en una estructura (por ejemplo, HBox
, VBox
, GridPane
).
Existen dos tipos de nodos:
- Nodos gráficos (leaf nodes): Son los elementos visuales que aparecen en la interfaz. Entre sus clases podemos encontrar:
Label
,Button
,TextField
,ImageView
, etc. - Nodo contenedores (branch nodes): Organizan otros nodos en la escena y pueden contener múltiples nodos hijos. Podemos encontrar entre ellos,
HBox
,VBox
, etc.
JavaFX utiliza una estructura de árbol para organizar los nodos. La raíz del árbol es un nodo especial, Scene
, y todos los demás nodos son descendientes de la raíz.
Todos los nodos tienen propiedades comunes como layoutX
, layoutY
, opacity
, visible
, style
, etc. Además, pueden manejar eventos de usuario como clics, teclas presionadas, movimientos del ratón, etc.
También, los nodos pueden ser transformados (escalados, rotados, trasladados) usando las clases de transformación de JavaFX, y se pueden aplicar efectos visuales como sombras y reflejos a los nodos.
Controles de usuarios¶
Los controles de usuarios, también conocidos como nodos gráficos, son aquellos elementos que pueden interactuar con el usuario. Entre sus clases encontramos:
Button
. Un botón simple que puede ser clicado para realizar una acción.ToggleButton
: Un botón que puede estar en un estado activado o desactivado.CheckBox
: Una casilla que puede estar seleccionada o deseleccionada.RadioButton
: Botones de opción que se agrupan para permitir una selección exclusiva.TextField
: Un campo de texto de una sola línea.PasswordField
: Un campo de texto de una sola línea para ingresar contraseñas, ocultando el texto ingresado.TextArea
: Un campo de texto de varias líneas.ComboBox
: Un menú desplegable que permite seleccionar una opción de una lista.ChoiceBox
: Similar aComboBox
, pero con una apariencia y comportamiento ligeramente diferente.ListView
: Un control que muestra una lista de elementos.Label
: Un control para mostrar texto estático.ImageView
: Un control para mostrar imágenes.ProgressBar
: Una barra de progreso para mostrar el progreso de una tarea.ProgressIndicator
: Similar a ProgressBar, pero con una apariencia circular.TableView
: Para mostrar información en forma de tabla.TreeView
: Para mostrar información de forma jerárquica (árbol)
En la siguiente tabla, vemos los métodos que tienen en común la mayoría de los nodos:
Método | Descripción |
---|---|
setText(String text) | Añade el texto al componente. |
getText() | Obtiene el texto del componente |
setDisable(boolean value) | Permite deshabilitar o habilitar el componente |
isDisable() | Devuelve true si el componente está deshabilitado, por el contrario devuelve false |
setVisible(boolean value) | Muestra u oculta el componente |
isVisible() | Devuelve true si el componente es visible, false si no lo es |
setStyle(String style) | Aplica el estilo al componente |
setPrefWidth() | Configura el ancho preferido del componente |
setPrefHeight() | Configura el alto preferido del componente |
setMaxWidth() | Configura el ancho máximo del componente |
setMaxHeight() | Configura el alto máximo del componente |
setMinWidth() | Configura el ancho mínimo del componente |
setMinHeight() | Configura el alto mínimo del componente |
Cada nodo tiene su propio sistema de coordenadas, que a diferencia del sistema de coordenadas cartesianas, el eje Y está invertido, por lo que el origen de la coordenada está situada en la esquina superior izquierda del nodo.
Este sistema de coordenadas también es utilizado para distribuir y posicionar los descendientes en relación con el nodo padre, es decir, cada nodo hijo tendrá su propio sistema de coordenadas y tendrá una posición relativa dentro del sistema de coordenadas del nodo padre.
Aplicación JavaFX¶
Existen dos formas de crear una aplicación con JavaFx:
- Usando un archivo FXML que define los elementos que componen la interfaz (Puede usarse la herramienta
SceneBuilder
para crear el archivo FXML) - Programar la interfaz usando el código de la API JavaFX.
De momento, usaremos la última opción.
Para representar una aplicación en JavaFx, hacemos uso de la clase Application
que es la clase base para todas las aplicaciones JavaFX. Proporciona el punto de entrada principal y el ciclo de vida de una aplicación JavaFX. Para crear una aplicación JavaFX, debes extender la clase Application
y sobrescribir el método start()
.
Una aplicación JavaFX pasa por varios estados a lo largo de su vida. Los métodos principales que controlan este ciclo de vida son:
init()
: Se llama antes de que la aplicación JavaFX se inicie y antes del métodostart()
. No es obligatorio sobrescribirlo al extender de la claseApplication
. Se suele usar para inicializar cualquier recurso que no sea gráfico. Se ejecuta en el hilo de lanzamiento de la aplicación y no en el hilo de la aplicación JavaFX. Se debe llamar asuper.init()
para que se JavaFX inicializa lo necesariostart(Stage primaryStage)
: Este método se ejecuta cuando la aplicación ya es iniciada y se desea pintar la aplicación JavaFX. Es obligatorio su sobrescritura, ya que en ella se configura y se muestra la interfaz de usuario principal de la aplicación. Se proporciona un objeto de la claseStage
que representa la ventana principal de la aplicación.stop()
. Se llama cuando la aplicación se detiene. Se utiliza para liberar recursos y se ejecuta en el hilo de aplicación de JavaFX. No es obligatorio sobrescribir este método, pero al hacer se debe llamar asuper.stop()
para que se JavaFX libere sus recursos.
Además de los métodos principales, se debe puede utilizar el método launch(String ...args)
. Este método es un método estático que se utiliza para inicializar la aplicación JavaFX, y llama internamente a los métodos descritos anteriormente, en el orden adecuado. Dicho método debe ser usado en el main
de la aplicación.