いくつかのラベルとボタンを表示する単純な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は本当に私の得意ではないので、どんな助けでもいただければ幸いです。
この link 、特にPercentage Sizingに関する部分が表示されます。列が2つしかない場合は、そのコードが機能することがわかりました。
GridPane grid = new GridPane();
/* your code */
ColumnConstraints column1 = new ColumnConstraints();
column1.setPercentWidth(50);
grid.getColumnConstraints().add(column1);
誰かが答えを探している場合、これは私にとってどのように機能したかです:
@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();
}
この設定では、グリッドはウィンドウのすべてのスペースを取り、ウィンドウに合わせて自動的にサイズ変更されます。
レイアウトに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>
明確ではありませんが、GridPaneはすでにその親コンテナーと同じ大きさだと思います。 「Scene scene = new Scene(root、300、250);」の前に次の2行のコードを追加すると、何が起こっているかを確認できるはずです。
root.setStyle("-fx-background-color: yellow;");
g.setStyle("-fx-border-color: blue;");
GridPaneをStackPaneに配置するのではなく、GridBoxをHBoxまたはVBoxに追加する必要があります。グリッドペインを調整する方が便利です。ところで、まだg.setPrefSize(arg0、arg1)のようないくつかのメソッドがあります。それに応じて高さと幅を設定します。