JavaFX Region vs Pane
Region et Pane sont utilisés pour redimensionner les nœuds enfants redimensionnables à leur taille préférée et ne les repositionnent pas. Ce tutoriel montre la différence entre Region
et Pane
dans JavaFX.
Région JavaFX
La classe JavaFX Region
peut être utilisée comme classe de base pour tous les volets de mise en page JavaFX. Il fournit quelques propriétés partagées par toutes les classes de mise en page JavaFX utilisées pour étendre la région.
Le JavaFX a de nombreuses classes qui sont des sous-classes de Pane
, Control
, Chart
et Axis
. Ces quatre classes et toutes les autres sont les sous-classes de la classe Region
; tous auront les mêmes propriétés que Region
.
Les propriétés de la Région sont indiquées ci-dessous :
Background
Content Area
Padding
Borders
Margin
Region Insets
Volet JavaFX
JavaFX Pane
est une sous-classe de Region
. Le Pane
est un conteneur de mise en page qui peut contenir de nombreux autres composants JavaFX pour les mettre en page.
Il ne fournit aucun algorithme de disposition mais affiche les composants qu’il contient sur l’emplacement, ce qui est préférable pour les composants. Le Pane
utilise layoutX
et layoutY
, spécifiés par ses composants enfants, pour déterminer où ils veulent être affichés.
Le Pane
hérite de toutes les propriétés de la classe JavaFX Region
car il s’agit d’une sous-classe. Ainsi, l’arrière-plan, la zone de contenu, le rembourrage, les bordures, etc. peuvent également être utilisés pour le Pane
.
JavaFX Region vs Pane
Region
et Pane
sont utilisés pour redimensionner les nœuds enfants redimensionnables à leur taille préférée. Ils ne les repositionneront jamais.
- La
Region
est une superclasse qui a des nœuds enfants. LePane
est une sous-classe de la classeRegion
avec des nœuds enfants. - La
Region
ne permet pas de manipuler les nœuds enfants via l’API publique ; d’autre part,Pane
laissera l’API publique manipuler les nœuds enfants. - La méthode
Region.getChildren()
est protégée alors quePane.getChildren
n’est pas une méthode protégée. - La
Region
est dédiée aux développeurs de composants ; c’est pourquoi il donne le choix d’autoriser ou non l’utilisateur de l’API à manipuler les enfants commePane
,Hbox
, etc. D’un autre côté,Pane
ne fournit aucune autorisation de ce type ; Les utilisateurs de l’API peuvent manipuler directement les nœuds enfants.
Essayons des exemples pour Region
et Pane
.
L’exemple pour 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);
}
}
Le code ci-dessus est utilisé pour envelopper le texte dans une étiquette. Comme nous pouvons le voir, nous avons ajouté des nœuds enfants à Region
, ce qui est impossible, donc ce code devrait générer une erreur.
Voir la sortie :
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)
Essayons le même exemple pour Pane
, où nous pouvons ajouter des nœuds enfants au volet. Voir exemple :
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);
}
}
Ce code fonctionnera correctement car nous pouvons ajouter des nœuds enfants au volet. Voir la sortie :
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