JavaFX Region vs. Pane
Region und Pane werden verwendet, um die Größe der anpassbaren untergeordneten Knoten auf ihre bevorzugte Größe zu ändern und sie nicht neu zu positionieren. Dieses Tutorial demonstriert den Unterschied zwischen Region
und Pane
in JavaFX.
JavaFX-Region
Die JavaFX-Klasse Region
kann als Basisklasse für alle JavaFX-Layoutfenster verwendet werden. Es stellt einige Eigenschaften bereit, die von allen JavaFX-Layoutklassen gemeinsam genutzt werden, die zum Erweitern der Region verwendet werden.
JavaFX hat viele Klassen, die Unterklassen von Pane
, Control
, Chart
und Axis
sind. Diese vier und alle anderen Klassen sind die Unterklassen der Klasse Region
; alle haben dieselben Eigenschaften wie Region
.
Die Eigenschaften der Region sind unten angegeben:
Background
Content Area
Padding
Borders
Margin
Region Insets
JavaFX-Pane
JavaFX Pane
ist eine Unterklasse von Region
. Das Pane
ist ein Layout-Container, der viele andere JavaFX-Komponenten enthalten kann, um sie zu gestalten.
Es bietet keinen Layoutalgorithmus, sondern zeigt die enthaltenen Komponenten an der für die Komponenten bevorzugten Position an. Das Pane
verwendet layoutX
und layoutY
, die durch seine untergeordneten Komponenten angegeben werden, um zu bestimmen, wo sie angezeigt werden sollen.
Das Pane
erbt alle Eigenschaften der JavaFX-Klasse Region
, da es sich um eine Unterklasse handelt. So können Hintergrund, Inhaltsbereich, Polsterung, Rahmen usw. auch für Pane
verwendet werden.
JavaFX-Region vs. Bereich
Sowohl Region
als auch Pane
werden verwendet, um die anpassbaren untergeordneten Knoten auf ihre bevorzugte Größe zu ändern. Sie werden sie niemals neu positionieren.
- Die
Region
ist eine Oberklasse, die untergeordnete Knoten hat. DiePane
ist eine Unterklasse derRegion
-Klasse mit untergeordneten Knoten. - Die
Region
erlaubt keine Manipulation der untergeordneten Knoten über die öffentliche API; Andererseits lässtPane
die öffentliche API die untergeordneten Knoten manipulieren. - Die
Region.getChildren()
ist geschützt, währendPane.getChildren
keine geschützte Methode ist. - Die
Region
ist den Komponentenentwicklern gewidmet; Aus diesem Grund gibt es die Möglichkeit, dem API-Benutzer zu erlauben oder nicht, die untergeordneten Elemente wiePane
,Hbox
usw. zu manipulieren. Andererseits bietetPane
keine solche Erlaubnis; API-Benutzer können die untergeordneten Knoten direkt manipulieren.
Lassen Sie uns Beispiele für Region
und Pane
ausprobieren.
Das Beispiel für 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);
}
}
Der obige Code wird verwendet, um den Text in ein Etikett einzuschließen. Wie wir sehen können, haben wir untergeordnete Knoten zu Region
hinzugefügt, was unmöglich ist, daher sollte dieser Code einen Fehler auslösen.
Siehe Ausgabe:
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)
Versuchen wir das gleiche Beispiel für Pane
, wo wir untergeordnete Knoten zum Bereich hinzufügen können. Siehe Beispiel:
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);
}
}
Dieser Code wird gut funktionieren, da wir dem Bereich untergeordnete Knoten hinzufügen können. Siehe Ausgabe:
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