Bouton d'alignement en JavaFX
J'ai créé ce JavaFX dialogue avec bouton de fermeture:
final int xSize = 300;
final int ySize = 280;
final Color backgroundColor = Color.WHITE;
final String text = "SQL Browser Version 1.0";
final Stage aboutDialog = new Stage();
aboutDialog.initModality(Modality.WINDOW_MODAL);
Button closeButton = new Button("Close");
closeButton.setAlignment(Pos.BOTTOM_CENTER);
closeButton.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent arg0) {
aboutDialog.close();
}
});
Scene aboutDialogScene = new Scene(VBoxBuilder.create()
.children(new Text(text), closeButton)
.alignment(Pos.CENTER)
.padding(new Insets(10))
.build(), xSize, ySize, backgroundColor);
aboutDialog.setScene(aboutDialogScene);
aboutDialog.show();
Je veux afficher le bouton au bas de la boîte de dialogue. J'ai utilisé cette fonction pour définir l'alignement:
closeButton.setAlignment(Pos.BOTTOM_CENTER);
mais pour une raison quelconque, le bouton est affiché au centre de la boîte de dialogue. Pouvez-vous me dire comment je peux résoudre ce problème?
Vous devez vous connecter pour publier un commentaire.
Si vous souhaitez utiliser un
VBox
pour cela, la méthode que vous cherchez est:VBox.setVgrow(nœud, la Priorité.TOUJOURS);
Par défaut une VBox seront il suffit de placer les enfants de l'un sous l'autre dans le haut à gauche de l'endroit où vous la placez. Les enfants ne développent pas de remplir tous les verticales de la zone, sauf si vous définissez un Vgrow contrainte sur un enfant avec une surabondance de hauteur max.
Quelques façons que vous pouvez obtenir la mise en page que vous cherchez (il en existe d'autres aussi):
StackPane
au lieu d'unVBox
et d'aligner votre bouton avecStackPane.setAlignment(closeButton, Pos.BOTTOM_CENTER);
AnchorPane
au lieu d'unVBox
et de définir des contraintes sur lesAnchorPane
de façon appropriée.Échantillon de printemps de la région:
Appel
closeButton.setAlignment(Pos.BOTTOM_CENTER);
définit l'alignement des choses (texte et graphiques) dans le closeButton, pas l'alignement de la closeButton à l'intérieur de son parent (qui est ce que vous voulez vraiment).Pour comprendre comment les contraintes de mise en forme du travail, SceneBuilder est un bon outil pour jouer avec lui, et ScenicView peut aider à résoudre les problèmes d'implantation dans le code existant.
Voici quelques FXML des échantillons de votre mise en page que vous pouvez charger jusqu'en SceneBuilder de voir comment les différentes options de mise en œuvre.
Tous les exemples ci-dessous peuvent facilement être rédigé dans un langage simple java en utilisant l'API JavaFX si vous préférez. Je leur ai écrit dans le fxml, car cela rend les mises en page facile à aperçu dans SceneBuilder.
FXML de l'échantillon à l'aide d'un StackPane:
Et la même chose avec quelques printemps régions:
Et la même chose avec l'étiquette elle-même développer pour remplir l'espace vide dans la VBox: