J'essaie de mettre deux boutons différents, un dans le coin inférieur gauche et un autre dans le coin inférieur droit.
Ces deux boutons sont dans différents HBox
et les deux HBox sont en bas du Borderpane
Pour ce faire j'ai fait ça, ça marche mais c'est moche:
envoisButton = new Button("Envoyer la commande"); envoisButton.setStyle("-fx-font: 20px \"Roboto\";"); envoisButton.setPrefSize(300,50); envoisButton.setGraphic(new ImageView(new Image("PleinVide/images/OK.png"))); HBox.setMargin(envoisButton,new Insets(0,20,20,20)); HBox rightButtons = new HBox(envoisButton); rightButtons.setAlignment(Pos.CENTER_RIGHT); synchroButton = new Button("Synchroniser"); synchroButton.setStyle("-fx-font: 20px \"Roboto\";"); synchroButton.setPrefSize(300,50); synchroButton.setGraphic(new ImageView(new Image("PleinVide/images/synchronize.png"))); HBox.setMargin(synchroButton,new Insets(0,20,20,20)); HBox leftButtons = new HBox(synchroButton); leftButtons.setAlignment(Pos.CENTER_LEFT); HBox buttons = new HBox(leftButtons,rightButtons); buttons.setSpacing(primaryScreenBounds.getWidth()*0.65); //This is very ugly (primaryScreenBounds == my screen resolution) borderPane.setBottom(buttons);
Voici le résultat:
Nous pouvons voir que les 2 boutons sont là où je veux qu'ils soient, mais si à l'avenir je veux ajouter un autre bouton, cela ne fonctionnera pas du tout: /
Avez-vous une solution pour placer le deux boutons aux coins? Merci beaucoup.
3 Réponses :
Enveloppez les deux HBox
es dans un autre HBox
, définissez les alignements appropriés et faites-les toujours croître horizontalement.
HBox hbox = new HBox(); hbox.getChildren().add(new Button("Left Button")); Pane filler = new Pane(); hbox.getChildren().add(filler); HBox.setHgrow(filler, Priority.ALWAYS); hbox.getChildren().add(new Button("Right Button")); borderPane.setBottom(hbox);
Une autre option consiste à utiliser un seul HBox
et à utiliser une région / un volet "de remplissage". Par exemple:
import javafx.application.Application; import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.layout.BorderPane; import javafx.scene.layout.HBox; import javafx.scene.layout.Priority; import javafx.stage.Stage; public class App extends Application { @Override public void start(Stage primaryStage) throws Exception { BorderPane root = new BorderPane(new Label("Hello, World!")); HBox leftBox = new HBox(new Button("Left Button")); leftBox.setAlignment(Pos.CENTER_LEFT); HBox.setHgrow(leftBox, Priority.ALWAYS); HBox rightBox = new HBox(new Button("Right Button")); rightBox.setAlignment(Pos.CENTER_RIGHT); HBox.setHgrow(rightBox, Priority.ALWAYS); HBox bottom = new HBox(leftBox, rightBox); bottom.setPadding(new Insets(10)); root.setBottom(bottom); primaryStage.setScene(new Scene(root, 600, 400)); primaryStage.show(); } }
Oh OK, j'ai essayé quelque chose comme votre solution avant mais j'ai oublié le HBox.setHgrow (leftBox, Priority.ALWAYS);
. Maintenant, cela fonctionne parfaitement! Merci pour votre solution simple!
vous pouvez utiliser un quadrillage.
Au lieu d'ajouter des boutons dans votre exemple, ajoutez un quadrillage et ajoutez les boutons dans ce quadrillage.
Ou
Utilisez un quadrillage comme scène et style et ajoutez des contraintes en conséquence (c'est plus difficile). De cette façon, si vous souhaitez ajouter des boutons, tout ce que vous avez à faire est de déterminer les coordonnées des emplacements dans le quadrillage.
J'ai essayé un GridPane avant mais cela n'a pas fonctionné pour moi, idk pourquoi: / Merci pour votre réponse.
Je suggérerais
<?xml version="1.0" encoding="UTF-8"?> <?import javafx.scene.control.*?> <?import java.lang.*?> <?import javafx.scene.layout.*?> <BorderPane prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"> <center> <Pane style="-fx-background-color: red;" BorderPane.alignment="CENTER" /> </center> <bottom> <AnchorPane maxHeight="-Infinity" maxWidth="1.7976931348623157E308" minHeight="-Infinity" minWidth="-Infinity" style="-fx-background-color: green;" BorderPane.alignment="CENTER"> <children> <Button text="Button" AnchorPane.bottomAnchor="20.0" AnchorPane.leftAnchor="20.0" AnchorPane.topAnchor="20.0" /> <Button text="Button" AnchorPane.bottomAnchor="20.0" AnchorPane.rightAnchor="20.0" AnchorPane.topAnchor="20.0" /> </children> </AnchorPane> </bottom> </BorderPane>