Question

Est-il possible de gérer des éléments enfants dans une HBox, de sorte que la somme des largeurs de tous les éléments enfants soit égale à la largeur de la HBox ?

Pour que les éléments remplissent la HBox et qu'il ne reste plus d'espace.

La hauteur des éléments enfants est par défaut la hauteur de la HBox, alors qu'en est-il de la largeur ?Je ne veux pas calculer la largeur dans mon programme.Il serait préférable que la mise en page fasse cela automatiquement, afin qu'aucun calcul ne soit nécessaire.

Était-ce utile?

La solution

Cela dépend de quel genre d'enfants HBox contenir.Certains enfants ne sont peut-être pas des nœuds redimensionnables.Cependant, d'une manière générale, vous pouvez utiliser HBox.setHgrow() méthode et définissez la même Priority pour tous les enfants de hbox.L'explication est dans son javadoc :

Définit la priorité de croissance horizontale pour l'enfant lorsqu'elle est contenue par une HBOX.S'il est défini, la HBOX utilisera la priorité pour allouer un espace supplémentaire si la HBOX est redimensionnée plus grande que la largeur préférée.Si plusieurs enfants Hbox ont le même croissance horizontale priorité, alors l'espace supplémentaire sera diviser soirée entre eux.Si aucune priorité de croissance horizontale n'est définie sur un enfant, la HBOX ne l'allouera jamais d'espace horizontal supplémentaire si disponible.La définition de la valeur sur NULL supprimera la contrainte.

De plus, si vous essayez d'obtenir une mise en page de type grille, essayez d'autres options de mise en page, par exemple TilePane ou FlowPane et peut-être GridPane.

Autres conseils

Le code simple pour votre réponse serait ceci:

Button button1 = new Button("Save");
Button button2 = new Button("Delete");
HBox.setHgrow(button1, Priority.ALWAYS);
HBox.setHgrow(button2, Priority.ALWAYS);

Il est recommandé d'utiliser la classe Hbox plutôt que de Nom du volet HBOX.

Dans FXML:

<HBox>
   <Label HBox.hgrow="ALWAYS" maxWidth="Infinity">
       TEST
   </Label>
</HBox>

Ajout de la réponse de @ BDShahab, car HBOX tentera de redimensionner leurs enfants à leurs largeurs préférées, ils ne rempliront la boîte que si leurs largeurs préférées combinées sont plus larges que la largeur de la housse.

Il peut être nécessaire de faire quelque chose comme:

Button button1 = new Button("Save");
Button button2 = new Button("Delete");
HBox.setHgrow(button1, Priority.ALWAYS);
HBox.setHgrow(button2, Priority.ALWAYS);
button1.setPrefWidth(100000);
button2.setPrefWidth(100000);

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top