GridPane は、その列のすべての要素の最大優先幅に従って、各列のデフォルト幅を計算すると予想していました。ただし、私のコードでは、幅が小さすぎるように計算されているようで、列のラベルの 1 つが切り取られています。
ここに私の「cashflowform.fxml」があります:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.shape.Box?>
<GridPane xmlns:fx="http://javafx.com/fxml" fx:controller="finfx.ui.CashFlowForm"
style="-fx-padding:25;"
vgap="5" hgap="5">
<Label text="Datum"
GridPane.columnIndex="0" GridPane.rowIndex="0">
</Label>
<DatePicker fx:id="datePicker" GridPane.columnIndex="1" GridPane.rowIndex="0"/>
<Label text="Betrag"
GridPane.columnIndex="0" GridPane.rowIndex="1">
</Label>
<TextField GridPane.columnIndex="1" GridPane.rowIndex="1"/>
<Label text="Kategorie"
GridPane.columnIndex="0" GridPane.rowIndex="2">
</Label>
<TextField GridPane.columnIndex="1" GridPane.rowIndex="2"/>
<Label text="Anmerkung"
GridPane.columnIndex="0" GridPane.rowIndex="3">
</Label>
<TextField GridPane.columnIndex="1" GridPane.rowIndex="3"/>
<Box GridPane.columnIndex="0" GridPane.rowIndex="4"
GridPane.columnSpan="2"
GridPane.hgrow="ALWAYS"
height="20">
</Box>
<Button text="Speichern"
GridPane.columnIndex="0" GridPane.rowIndex="5"
GridPane.columnSpan="2"
GridPane.hgrow="ALWAYS" maxWidth="Infinity">
</Button>
<Button text="Speichern & Weitere Position..."
GridPane.columnIndex="0" GridPane.rowIndex="6"
GridPane.columnSpan="2"
GridPane.hgrow="ALWAYS" maxWidth="Infinity">
</Button>
<Button text="Abbrechen"
GridPane.columnIndex="0" GridPane.rowIndex="7"
GridPane.columnSpan="2"
GridPane.hgrow="ALWAYS" maxWidth="Infinity">
</Button>
</GridPane>
そして、これがステージのセットアップ方法です(サイズを設定していないことに注意してください。そのため、サイズ自体を計算させます):
primaryStage.setScene(new Scene(FXMLLoader.loadFxmlRoot("cashflowform")));
primaryStage.show();
結果:
ご覧のとおり、最初の列は小さすぎて、私の「Anmerkung」ラベルを完全に表示できません。それはなぜですか?これを修正する最善の方法は何ですか?
PS: 余談ですが、気になる方は、ラベル/フィールドとボタンの間のスペースフィラーとして追加した「ボックス」が、よく見ると実際には小さな白い縦線として表示されていることにも気付きました。これには Box を使用するのは適切ではないようです。私は JavaFX から始めたばかりですが、Swing の "Box.createVerticalGlue()" に対応する適切なものは何でしょうか?
PPS: 誰かが尋ねる前に: 私のコードに見られる「FXMLLoader」は、javafx.fxml.FXMLLoader ではなく、カスタム ユーティリティ クラスです。
ありがとうございました!