J'ai travaillé sur un logiciel utilisant JavaFX et j'ai un problème stupide mais inquiétant.
Dans certaines parties du code, j'ai un HBox
et, à l'intérieur, trois éléments: un image
, un label
et un VBox
.
Le problème est que je voudrais que le image
soit aligné à gauche, c'est-à-dire à côté de la marge gauche du window
et le VBox
aligné à droite , c'est-à-dire à côté de la bordure droite du window
et je ne sais pas comment le faire.
J'ai essayé d'utiliser VBox.setAlignment(Pos.RIGHT_CENTER)
, mais cela n'a pas fonctionné.
Il s'agit d'un problème d'alignement le plus courant lorsque vous souhaitez placer un élément vers les deux coins de la mise en page.
Disons que vous voulez avoir:
HBox
|
ImageView (Left)
Label (Center)
VBox (Right)
La solution très simple consiste à utiliser deux Regions
supplémentaires. Un entre ImageView et Label. L'autre entre Label et VBox.
HBox
|
ImageView (Left)
Region
Label (Center)
Region
VBox (Right)
Ces régions doivent avoir HGrow
défini comme Priority.Always
, de sorte que si vous redimensionnez la HBox, ces deux éléments grandiront, en gardant les autres éléments intacts à leur emplacement.
exemple FXML:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.*?>
<HBox alignment="CENTER" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="94.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
<children>
<ImageView fitHeight="150.0" fitWidth="140.0" pickOnBounds="true" preserveRatio="true">
<image>
<Image url="http://www.imaginaformacion.com/wp-content/uploads/2010/06/JavaFx.png" />
</image>
</ImageView>
<Region prefHeight="200.0" prefWidth="200.0" HBox.hgrow="ALWAYS" />
<Label prefHeight="17.0" prefWidth="205.0" text="Label On the Center" />
<Region prefHeight="200.0" prefWidth="200.0" HBox.hgrow="ALWAYS" />
<VBox alignment="CENTER_RIGHT" prefHeight="94.0" prefWidth="200.0">
<children>
<Label prefHeight="17.0" prefWidth="200.0" text="Label Inside the VBox" />
</children>
</VBox>
</children>
</HBox>
Veuillez noter le HBox.hgrow="ALWAYS"
dans les deux régions.
Sortie
Je pense que la meilleure option pourrait être de passer de HBox
à BorderPane
. Il vous permet de créer des éléments collés à n'importe quel bord de votre fenêtre.
Une autre option est GridPane
. Vous pouvez sélectionner la colonne et changer sa propriété 'Halignment' en 'RIGHT'.
Et, en passant, je recommande d'utiliser JavaFX Scene Builder tout en s'amusant avec JavaFX.