JavaFX Region vs Pane

Sheeraz Gul 15 febrero 2024
  1. Región JavaFX
  2. JavaFX Pane
  3. JavaFX Region vs. Pane
JavaFX Region vs Pane

Region y Pane se utilizan para cambiar el tamaño de los nodos secundarios redimensionables a su tamaño preferido y no cambiarlos de posición. Este tutorial demuestra la diferencia entre Region y Pane en JavaFX.

Región JavaFX

La clase Region de JavaFX se puede utilizar como clase base para todos los paneles de diseño de JavaFX. Proporciona algunas propiedades compartidas por todas las clases de diseño de JavaFX que se utilizan para ampliar la Región.

JavaFX tiene muchas clases que son subclases de Pane, Control, Chart y Axis. Estas cuatro y todas las demás clases son las subclases de la clase Region; todos ellos tendrán las mismas propiedades que Region.

Las propiedades de la Región se dan a continuación:

  • Background
  • Content Area
  • Padding
  • Borders
  • Margin
  • Region Insets

JavaFX Pane

JavaFX Pane es una subclase de Region. El Pane es un contenedor de diseño que puede contener muchos otros componentes JavaFX para diseñarlos.

No proporciona ningún algoritmo de diseño, pero muestra los componentes que contiene en la ubicación, lo que es preferible para los componentes. El Pane utiliza layoutX y layoutY, especificados por sus componentes secundarios, para determinar dónde quieren mostrarse.

El Pane hereda todas las propiedades de la clase JavaFX Region ya que es una subclase. Por lo tanto, el fondo, el área de contenido, el relleno, los bordes, etc., también se pueden usar para el Pane.

JavaFX Region vs. Pane

Tanto Region como Pane se utilizan para cambiar el tamaño de los nodos secundarios redimensionables a su tamaño preferido. Nunca los reposicionarán.

  • La Region es una superclase que tiene nodos secundarios. El Pane es una subclase de la clase Region con nodos secundarios.
  • La Region no permite manipular los nodos secundarios a través de la API pública; por otro lado, Pane permitirá que la API pública manipule los nodos secundarios.
  • El Region.getChildren() está protegido mientras que Pane.getChildren no es un método protegido.
  • La Region está dedicada a los desarrolladores de componentes; es por eso que da la opción de permitir o no permitir que el usuario de la API manipule los elementos secundarios como Pane, Hbox, etc. Por otro lado, Pane no proporciona ningún permiso como ese; Los usuarios de la API pueden manipular directamente los nodos secundarios.

Probemos ejemplos tanto para Region como para Pane.

El ejemplo para Region:

package delftstack;

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.layout.Region;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
public class JavaFX_Reigon extends Application {
  public void start(Stage Label_Stage) {
    String Label_Text = "DelftStack is a resource for everyone interested in programming.";
    // Create a Label
    Label Demo_Label = new Label(Label_Text);
    // wrap the label
    Demo_Label.setWrapText(true);
    // Set the maximum width of the label
    Demo_Label.setMaxWidth(300);
    // Set the position of the label
    Demo_Label.setTranslateX(30);
    Demo_Label.setTranslateY(30);
    // Create a Region
    Region Label_Root = new Region();
    // Add Children to region which will throw an error
    Label_Root.getChildren().add(Demo_Label);
    // Set the stage
    Scene Label_Scene = new Scene(Label_Root, 595, 150, Color.BEIGE);
    Label_Stage.setTitle("Region Example");
    Label_Stage.setScene(Label_Scene);
    Label_Stage.show();
  }
  public static void main(String args[]) {
    launch(args);
  }
}

El código anterior se usa para envolver el texto en una etiqueta. Como podemos ver, agregamos nodos secundarios a Region, lo cual es imposible, por lo que este código debería arrojar un error.

Ver salida:

Exception in Application start method
java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    at javafx.graphics@18.0.1/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:465)
    at javafx.graphics@18.0.1/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:364)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1071)

Probemos el mismo ejemplo para Pane, donde podemos agregar nodos secundarios al panel. Ver ejemplo:

package delftstack;

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.layout.Pane;
import javafx.scene.layout.Region;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
public class JavaFX_Reigon extends Application {
  public void start(Stage Label_Stage) {
    String Label_Text = "DelftStack is a resource for everyone interested in programming.";
    // Create a Label
    Label Demo_Label = new Label(Label_Text);
    // wrap the label
    Demo_Label.setWrapText(true);
    // Set the maximum width of the label
    Demo_Label.setMaxWidth(300);
    // Set the position of the label
    Demo_Label.setTranslateX(30);
    Demo_Label.setTranslateY(30);
    // Create a Pane
    Pane Label_Root = new Pane();
    // Add Children to Pane which will work properly
    Label_Root.getChildren().add(Demo_Label);
    // Set the stage
    Scene Label_Scene = new Scene(Label_Root, 595, 150, Color.BEIGE);
    Label_Stage.setTitle("Pane Example");
    Label_Stage.setScene(Label_Scene);
    Label_Stage.show();
  }
  public static void main(String args[]) {
    launch(args);
  }
}

Este código funcionará bien porque podemos agregar nodos secundarios al panel. Ver salida:

Panel JavaFX

Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook

Artículo relacionado - Java JavaFX