これに a を使用する場合VBox
、探している方法は次のとおりです。
VBox.setVgrow(node, Priority.ALWAYS);
デフォルトでは、VBox は、配置した場所の左上から子を下に配置します。無制限の最大高さで子に Vgrow 制約を設定しない限り、子は使用可能な垂直領域をすべて埋めるために拡張されません。
求めるレイアウトを取得する方法はいくつかあります (他にもあります)。
- a の
StackPane
代わりに aVBox
を使用し、ボタンをStackPane.setAlignment(closeButton, Pos.BOTTOM_CENTER);
AnchorPane
a の代わりに aを使用VBox
し、適切に制約を設定しAnchorPane
ます。
- 空のスペースを埋めるために拡張する空のリージョンであるスプリング リージョンを使用します。
サンプルの春の地域:
Region topSpring = new Region();
Region bottomSpring = new Region();
Scene aboutDialogScene = new Scene(VBoxBuilder.create()
.children(topSpring, new Text(text), bottomSpring, closeButton)
.alignment(Pos.CENTER)
.padding(new Insets(10))
.build(), xSize, ySize, backgroundColor);
VBox.setVgrow(topSpring, Priority.ALWAYS);
VBox.setVgrow(bottomSpring, Priority.ALWAYS);
呼び出しcloseButton.setAlignment(Pos.BOTTOM_CENTER);
は、親内の closeButton の配置ではなく、closeButton 内のもの (テキストとグラフィック) の配置を設定します (これは本当に必要なものです)。
レイアウトの制約がどのように機能するかを理解するには、SceneBuilderを試してみるのに適したツールであり、ScenicViewは既存のコードのレイアウトの問題をデバッグするのに役立ちます。
SceneBuilder にロードして、さまざまなレイアウト オプションがどのように機能するかを確認できるレイアウトの FXML サンプルを次に示します。
以下のサンプルはすべて、必要に応じて JavaFX API を使用してプレーンな Java で簡単に作成できます。SceneBuilder でレイアウトを簡単にプレビューできるように、fxml で記述しました。
StackPane を使用した FXML サンプル:
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.paint.*?>
<StackPane id="StackPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="280.0" prefWidth="300.0" xmlns:fx="http://javafx.com/fxml">
<children>
<Label text="SQL Browser Version 1.0" />
<Button mnemonicParsing="false" text="Button" StackPane.alignment="BOTTOM_CENTER" />
</children>
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
</StackPane>
そして、いくつかの春の地域で同じこと:
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.paint.*?>
<VBox alignment="CENTER" prefHeight="280.0" prefWidth="300.0" xmlns:fx="http://javafx.com/fxml">
<children>
<Region prefHeight="-1.0" prefWidth="-1.0" VBox.vgrow="ALWAYS" />
<Label text="SQL Browser Version 1.0" />
<Region prefHeight="-1.0" prefWidth="-1.0" VBox.vgrow="ALWAYS" />
<Button mnemonicParsing="false" text="Close" />
</children>
</VBox>
そして、VBox の空きスペースを埋めるために展開するように設定されたラベル自体と同じこと:
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.paint.*?>
<VBox alignment="CENTER" prefHeight="280.0" prefWidth="300.0" xmlns:fx="http://javafx.com/fxml">
<children>
<Label maxHeight="1.7976931348623157E308" text="SQL Browser Version 1.0" VBox.vgrow="ALWAYS" />
<Button mnemonicParsing="false" text="Close" />
</children>
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
</VBox>