後で印刷できる請求書を作成しようとしています。私はそれを行うために VBoxes と GridPanes を使用しています。中央の GridPane の列数は可変です。ループを使用して構築しています。GridPane (緑の境界線) が VBox (赤の境界線) 全体にまたがるようにさまざまなことを試みましたが、何も機能していないようです。
境界線を付けた後、グリッドは実際には VBox 全体にまたがっていますが、列はスペース全体を占有していないことに気付きました。中央のグリッドの列数を認識しておらず、500px 未満に抑える必要があるため、列の制約を与えることはできません。
以下は関連するコードです。
final int width = 500;
BorderPane borderpane = new BorderPane();
VBox vboxTop = vboxForPrinting('l');
VBox vboxMiddle = vboxForPrinting('r');
VBox vboxBottom = vboxForPrinting('r');
GridPane gridpaneTop = new GridPane();
GridPane gridpaneMiddle = new GridPane();
GridPane gridpaneBottom = new GridPane();
borderpane.setPrefWidth(width);
vboxTop.setFillWidth(true);
vboxMiddle.setFillWidth(true);
vboxBottom.setFillWidth(true);
// Some code
vboxTop.getChildren().add(gridpaneTop);
vboxMiddle.getChildren().add(gridpaneMiddle);
vboxBottom.getChildren().add(gridpaneBottom);
borderpane.setTop(vboxTop);
borderpane.setCenter(vboxMiddle);
borderpane.setBottom(vboxBottom);
関数 vboxForPrinting() を以下に示します。
public VBox vboxForPrinting(char align) {
VBox vbox = new VBox();
switch (align) {
case 'r':
case 'R':
vbox.setAlignment(Pos.CENTER_RIGHT);
break;
case 'l':
case 'L':
vbox.setAlignment(Pos.CENTER_LEFT);
break;
default:
vbox.setAlignment(Pos.CENTER);
}
vbox.setPadding(new Insets(5));
vbox.setSpacing(5);
vbox.setFillWidth(true);
return vbox;
}