it-swarm.com.de

JavaFX - Holen Sie sich GridPane nach Eltern

Ich habe ein einfaches GridPane mit ein paar Beschriftungen und einer Schaltfläche, aber es scheint nicht, dass es in das übergeordnete StackPane passt. Wie würde ich gehen und es so machen, dass es den Behälter füllt, in dem es sich befindet?

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

Die Benutzeroberfläche ist wirklich nicht meine Stärke und jede Hilfe wäre dankbar. 

15

Sie sollten dieses link sehen, insbesondere den Teil über Prozentuale Größen. Wenn Sie nur zwei Spalten haben, habe ich festgestellt, dass dieser Code funktioniert:

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

Falls jemand nach einer Antwort sucht, hat es für mich so funktioniert:

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

Bei diesem Setup nimmt das Raster den gesamten Platz des Fensters ein und passt sich automatisch an das Fenster an.

8
Eugene

Nehmen wir an, Ihr Layout hat 2 Spalten und 3 Zeilen. Sie können die Eigenschaften der Größe Ihrer Spalten und Zeilen nacheinander definieren:

  <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

Obwohl es nicht offensichtlich ist, denke ich, dass Ihr GridPane bereits so groß wie sein übergeordneter Container ist .. Wenn Sie die folgenden zwei Codezeilen vor "Szene Szene = Neue Szene (Stamm, 300, 250);" hinzufügen, sollten Sie dies tun in der Lage zu sehen, was los ist.

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

Statt GridPane in StackPane zu setzen, sollten Sie Ihr GridPane in HBox oder VBox hinzufügen. Es ist bequemer, die Gridpane anzupassen. Übrigens haben Sie noch einige Methoden wie g.setPrefSize (arg0, arg1); um Ihre Höhe und Breite entsprechend einzustellen.

0
Bipin Bhandari