Comment aligner un bouton de droite dans JavaFX?
Comment puis-je faire de la "droite" (deuxième bouton sur cette Fenêtre sera aligné à droite?
class HelloApp extends Application {
override def start(primaryStage: Stage): Unit = {
val root = new FlowPane(Orientation.VERTICAL) {
setPadding(new Insets(10, 10, 10, 10))
setVgap(10)
getChildren.add(new Button("Left"))
getChildren.add(new Button("Right") { setAlignment(Pos.CENTER_RIGHT) }) //this doesn't seem to be working
}
primaryStage.setScene(new Scene(root, 400, 400))
primaryStage.show()
}
}
Grâce
OriginalL'auteur devoured elysium | 2016-08-29
Vous devez vous connecter pour publier un commentaire.
La Solution De L'Échantillon
Voici un exemple qui propose un aligné à gauche et à droite aligné bouton:
Cette solution a été fournie dans le code Java plutôt que de Scala comme je n'ai pas de programme en Scala. Mais il devrait être facilement traduisible équivalent de la Scala de code.
Explication
J'ai choisi une HBox parce que, pour moi, ça a été le plus fréquent de vouloir avoir quelque chose à gauche et à droite de l'alignement. Mais il n'est pas vraiment de bonne ou de mauvaise ici et en utilisant d'autres types de mise en page tels que AnchorPane pour obtenir le résultat souhaité peut aussi vous donner une bonne solution.
Pour accomplir l'alignement à droite avec une HBox-je insérer une variable de la largeur de l'espacement volet entre la gauche nœuds alignés et le droit nœuds alignés, ce qui pousse tous le droit nœuds alignés à droite. J'ai ajouté des diverses contraintes supplémentaires sur min tailles de sorte que la totalité du texte du bouton est toujours visible, et donc qu'il y a toujours un petit espace entre la gauche et la droite nœuds alignés lorsque vous faites de la fenêtre.
Sur setAlignment()
La raison pour laquelle le
bouton.setAlignment()
méthode ne semble pas fonctionner pour vous, c'est qu'il ne fait pas ce que vous pensez qu'il va faire. setAlignment est pour l'alignement du texte dans le bouton, le bouton dépasse sa largeur préférée. Voir la setAlignment javadoc:Par défaut la largeur maximale pour un bouton est sa largeur préférée, de sorte que le bouton ne poussent pas dans la taille, sauf si vous explicitement définir sa largeur max de l'aide
button.setMaxWidth(Double.MAX_VALUE)
. Cela signifie que, par défaut, le setAlignment méthode ne fait rien du tout, qu'il n'y aura pas plus d'espace disponible à l'intérieur du bouton pour le bouton du contenu interne pour être aligné à l'intérieur.Pour mieux comprendre cela, lisez: Conseils de Dimensionnement et d'Alignement des Nœuds (fortement recommandé).
Sur l'alignement pour les autres Types de Volet
Il existe de nombreux autres l'agencement des vitres de la (comme AnchorPane, GridPane, etc), ce qui pourrait être utilisée pour accomplir mise en page similaire. La disposition différents volets de différentes fonctionnalités et Api. Cela signifie que la façon de traiter avec mise en commun des questions telles que l'alignement diffère entre eux (vous avez besoin de consulter leur API pour comprendre comment le faire pour chaque volet disposition type).
Si vous voulez contrôler l'alignement à l'intérieur d'un panneau disposition, vous devez utiliser un espaceur comme je l'ai démontré ci-dessus, ou définir d'autres volet de contraintes au niveau du nœud. Exemples de définition de contraintes sur les différents types de mise en page sont les méthodes suivantes (dont certaines sont statiques):
Le ci-dessus ne sont que des exemples, il y a beaucoup plus de moyens pour aligner les nœuds, par exemple en fixant le haut, au centre ou à droite des propriétés d'un BorderPane.
Pourquoi FlowPane n'est pas vraiment bon pour ce que vous essayez d'accomplir
Vous pouvez aligner à droite les nœuds dans un FlowPane par la définition de la FlowPane de l'Orientation à la verticale et de l'invocation de flowPane.setColumnHalignment(Pos.CENTER_RIGHT). Cependant, ce droit n'aligne tout dans le FlowPane, pas une seule chose à la gauche, et une autre chose de la droite, qui est ce que vous essayez de faire.
OriginalL'auteur jewelsea
Je ne suis pas sûr FlowPane vraiment la prend en charge. À l'aide de GridPane vous pouvez créer deux colonnes et de consommer la totalité de l'espace à l'aide de la première colonne. Quelque chose comme ceci:
OriginalL'auteur Bob Flannigon