1
votes

Comment mettre deux boutons dans chaque coin en bas d'un borderpane

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: Positions attendues des boutons 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.


0 commentaires

3 Réponses :


6
votes

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();
  }

}


1 commentaires

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!



-1
votes

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.


1 commentaires

J'ai essayé un GridPane avant mais cela n'a pas fonctionné pour moi, idk pourquoi: / Merci pour votre réponse.



0
votes

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>


0 commentaires