web-dev-qa-db-fra.com

Alignement JavaFX HBox

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é.

13
JOSEMAFUEN

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

enter image description here

36
ItachiUchiha

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.

5
kcpr