JavaFX Region vs Pane

Sheeraz Gul 15 février 2024
  1. Région JavaFX
  2. Volet JavaFX
  3. JavaFX Region vs Pane
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. Le Pane est une sous-classe de la classe Region 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 que Pane.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 comme Pane, 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 :

Volet JavaFX

Auteur: Sheeraz Gul
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

Article connexe - Java JavaFX