web-dev-qa-db-fra.com

JavaFX - Obtenir GridPane pour s'adapter à parent

J'ai un simple GridPane montrant quelques étiquettes et un bouton, mais je n'arrive pas à le faire correspondre au StackPane parent. Comment pourrais-je aller de l'avant et faire en sorte qu'il remplisse le conteneur dans lequel il se trouve?

    GridPane g = new GridPane();
    g.add(new Label("Categories"),0,0);
    g.add(new Label("Content"),1,0);        
    Button newCat = new Button("New Category");
    newCat.setOnAction(new EventHandler<ActionEvent>() {
        @Override public void handle(ActionEvent e) {
            System.out.println("Clicked");
        }
    });       
    g.add(newCat,0,1);
    g.setGridLinesVisible(true);
    StackPane root = new StackPane();
    root.getChildren().add(g);        
    Scene scene = new Scene(root, 300, 250);  
    primaryStage.setScene(scene);
    primaryStage.show();

L’UI n’est vraiment pas mon fort et toute aide serait la bienvenue. 

15

Vous devriez voir ce link , en particulier la partie concernant le pourcentage de dimensionnement. Si vous n'avez que deux colonnes, j'ai trouvé que ce code fonctionnait:

GridPane grid = new GridPane();
/* your code */
ColumnConstraints column1 = new ColumnConstraints();
column1.setPercentWidth(50);
grid.getColumnConstraints().add(column1);
11
Videl

Au cas où quelqu'un chercherait une réponse, voici comment cela a fonctionné pour moi:

@Override
public void start(Stage stage) throws Exception {
    stage.setTitle("Window title");
    GridPane grid = new GridPane();

    gridSetup(grid); // Building my grid elements here (2 columns)

    // Setting columns size in percent
    ColumnConstraints column = new ColumnConstraints();
    column.setPercentWidth(30);
    grid.getColumnConstraints().add(column);

    column = new ColumnConstraints();
    column.setPercentWidth(70);
    grid.getColumnConstraints().add(column);

    grid.setPrefSize(WINDOW_WIDTH, WINDOW_HEIGHT); // Default width and height
    grid.setMaxSize(Region.USE_COMPUTED_SIZE, Region.USE_COMPUTED_SIZE);

    Scene scene = new Scene(grid, WINDOW_WIDTH, WINDOW_HEIGHT);
    stage.setScene(scene);
    stage.show();
}

Avec cette configuration, la grille prend tout l’espace de la fenêtre et se redimensionne automatiquement avec la fenêtre.

8
Eugene

Supposons que votre mise en page comporte 2 colonnes et 3 lignes, vous pouvez définir les propriétés de taille de vos colonnes et lignes une par une:

  <GridPane 
    xmlns:fx="http://javafx.com/fxml/1"    
    id="gridPane" 
    prefHeight="768.0" 
    prefWidth="1024.0">     

    <gridLinesVisible>true</gridLinesVisible> 
    <columnConstraints>
        <ColumnConstraints percentWidth="20"  /> 
        <ColumnConstraints percentWidth="80" />        
    </columnConstraints>

    <rowConstraints>
        <RowConstraints minHeight="50"/> 
        <RowConstraints percentHeight="80"/>  
        <RowConstraints minHeight="50"/>  
    </rowConstraints> 

</GridPane>
4
elidio xg

Bien que cela ne soit pas évident, je pense que votre GridPane est déjà aussi grand que son conteneur parent . Si vous ajoutez les deux lignes de code suivantes avant "Scene scene = new Scene (root, 300, 250);" capable de voir ce qui se passe.

root.setStyle("-fx-background-color: yellow;");
g.setStyle("-fx-border-color: blue;");
0
ytw

Plutôt que de mettre GridPane dans StackPane, vous devez ajouter votre GridPane dans HBox ou VBox. Il est plus pratique d’ajuster votre Gridpane. Au fait, vous avez encore des méthodes comme g.setPrefSize (arg0, arg1); pour régler votre hauteur et votre largeur en conséquence.

0
Bipin Bhandari