JavaFX l'alignement de l'Étiquette en GridPane
Je suis confus quant à pourquoi le réglage de l'Étiquette.setAlignment(Pos.CENTER_RIGHT) n'affecte pas l'alignement de l'étiquette qui est ensuite ajouté à un GridPane? La seule façon de le faire est apparemment à travers la grille (par exemple, ColumnConstraints) ou, par exemple par l'ajout de l'Étiquette pour une HBox qui a un alignement à droite.
Pourquoi ne réglage de l'alignement de l'étiquette CENTER_RIGHT n'ont aucun effet? Je peux voir l'API dit: "Spécifie la façon dont le texte et les graphiques à l'intérieur de l'étiquette doivent être alignés lorsqu'il y a un espace vide à l'intérieur de l'Étiquette." Mais comment puis-je obtenir de l'espace vide dans un label?
Vous devez vous connecter pour publier un commentaire.
TL:DR version: au lieu de
label.setAlignment(Pos.CENTER_RIGHT);
utilisationGridPane.setHalignment(label, HPos.RIGHT);
.JavaFX utilise un top-down de mise en page. Donc la scène tailles le nœud racine de la taille de la scène, le nœud racine de tailles et de positions de chacun de ses nœuds enfants en fonction de sa stratégie de mise en page et la quantité de l'espace de la scène lui a donné, chaque nœud enfant puis la taille et la position de ses nœuds enfants en fonction de sa propre stratégie de mise en page et la quantité d'espace dont il dispose, et ainsi de suite, jusqu'le graphe de scène.
Selon la documentation de
Label
, lealignmentProperty
Bien sûr, la quantité d'espace disponible pour l'étiquette est déterminée par sa mère, qui dans ce cas est le volet grille. Bien sûr, vous pouvez trouver sur le volet grille de mise en page de la stratégie et de la façon de le configurer en lisant ses la documentation. En bref, si:
Par défaut, une grille volet d'attribuer a chaque nœud de sa taille par défaut, et, si la cellule, il est placé en a plus d'espace, permettra d'harmoniser le nœud en haut à gauche de la cellule de la grille. La taille préférée pour une étiquette est bien sûr le résultat d'un calcul de taille: juste assez grand pour tenir son contenu. Donc vous voyez que le simple fait de placer une étiquette sur un volet grille et le réglage de l'alignement sur l'étiquette n'aura aucun effet, parce que l'étiquette est de taille moyenne juste assez grand pour contenir son contenu, et il n'y a pas d'espace supplémentaire pour aligner le texte/graphique. Vous pouvez visualiser en plaçant une couleur d'arrière-plan ou à la frontière sur l'étiquette.
De sorte que vous pourrait définir l'alignement sur l'étiquette de
CENTER_RIGHT
, et ensuite demander le volet grille pour laisser l'étiquette de croître. Ce besoin de deux choses: tout d'abord, dites-le volet grille pour laisser l'étiquette de remplir la largeur de la cellule:et, depuis le volet grille devra également respecter le nœud enfant de taille maximale, et l'étiquette par défaut, utilise sa taille par défaut comme sa taille maximale, de permettre l'étiquette de croître:
L'étiquette passera à la taille de la cellule, et donc si vous avez également
il va aligner son propre contenu à droite.
Une démarche plus rationnelle est probablement juste de dire à la grille volet de l'alignement de l'étiquette dans la cellule:
Puis laissez l'étiquette de prendre sa taille par défaut et de l'alignement et tout fonctionnera.
Vous pouvez également utiliser un
ColumnConstraints
objet de définir l'alignement par défaut pour toutes les étiquettes dans une colonne particulière, qui est de loin le plus approche pratique si vous créez un formulaire.setFillWidth(true)
signifie la grille volet de la taille du nœud au maximum de sa largeur ou la largeur de la colonne. SisetFillWidth
est faux (valeur par défaut), il va définir la largeur du nœud de sa largeur préférée. Notez bien que la largeur de la colonne est déterminée par le maximum de pref largeur de l'ensemble de son contenu; en augmentant la pref largeur d'un nœud vous pouvez forcer la colonne à être plus large que vous le souhaitez.