1

スクリーンショット

後で印刷できる請求書を作成しようとしています。私はそれを行うために 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;
}
4

1 に答える 1

3

setHgrow()インターンが成長し、残りの使用可能なスペースを占有するグリッドペインの特定の子を申請できます。

javadoc から:

グリッドペインに含まれている場合の子の水平方向の拡大優先度を設定します。設定されている場合、グリッドペインが優先幅よりも大きくサイズ変更された場合、グリッドペインは優先度を使用して子の追加の水平スペースを割り当てます。値を null に設定すると、制約が削除されます。

GridPane.setHgrow(name, Priority.ALWAYS);

ここで、nameは、成長させて残りの空の場所を占めるラベルです。

すべてのフィールドまたは列を拡大する場合は、これをすべてに適用するか、ColumnConstraintsを作成して 1 つまたは複数の列に適用することができます。

以下のコードは動作するはずです:

ColumnConstraints columnConstraints = new ColumnConstraints();
columnConstraints.setFillWidth(true);
columnConstraints.setHgrow(Priority.ALWAYS);
gridPane.getColumnConstraints().add(columnConstraints);

あなたの懸念に来て、

中央のグリッドの列数を認識しておらず、500px 未満に抑える必要があるため、列の制約を与えることはできません。

列の数を追跡する必要はありません.hgrowは、利用可能な追加のスペースがある場合にのみ子の成長を許可します.

于 2015-07-27T09:05:47.390 に答える