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. ElPane
es una subclase de la claseRegion
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 quePane.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 comoPane
,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:
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