web-dev-qa-db-ja.com

JavaFX-GridPaneを取得して親に合わせる

いくつかのラベルとボタンを表示する単純なGridPaneがありますが、親StackPaneに合わせることができません。どのようにすれば、どのようなコンテナーでも満たすことができるようになりますか?

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

UIは本当に私の得意ではないので、どんな助けでもいただければ幸いです。

16

この link 、特にPercentage Sizingに関する部分が表示されます。列が2つしかない場合は、そのコードが機能することがわかりました。

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

誰かが答えを探している場合、これは私にとってどのように機能したかです:

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

この設定では、グリッドはウィンドウのすべてのスペースを取り、ウィンドウに合わせて自動的にサイズ変更されます。

8
Eugene

レイアウトに2つの列と3つの行があるとします。列と行のサイズのプロパティを1つずつ定義できます。

  <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

明確ではありませんが、GridPaneはすでにその親コン​​テナーと同じ大きさだと思います。 「Scene scene = new Scene(root、300、250);」の前に次の2行のコードを追加すると、何が起こっているかを確認できるはずです。

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

GridPaneをStackPaneに配置するのではなく、GridBoxをHBoxまたはVBoxに追加する必要があります。グリッドペインを調整する方が便利です。ところで、まだg.setPrefSize(arg0、arg1)のようないくつかのメソッドがあります。それに応じて高さと幅を設定します。

0
Bipin Bhandari