JavaFX-ステージを表示する前に、すべてのボタンに同じ幅を設定するにはどうすればよいですか?

ceklock

ペインのボタンに同じ幅を設定したいのですが、ステージを表示する前にボタンの幅がありません。ステージを表示せずに幅を取得するにはどうすればよいですか?

幅が定義されていないために機能しないコードの例:

public static HBox createHorizontalButtonBox(final List<Button> buttons, final Pos alignment, final double spacing, final boolean sameWidth) {
    HBox box = new HBox(spacing);
    box.setAlignment(alignment);
    box.getChildren().addAll(buttons);

    if (sameWidth && buttons.size() > 1) {
        double max = maxWidth(buttons);
        for (Button b : buttons) {
            b.setPrefWidth(max);
        }
    }

    return box;
}
ジュエルシー

レイアウトペインにレイアウトを任せます。

使用しているレイアウトペインが希望どおりのレイアウトを提供していない場合は、次のいずれかを実行します。

  1. レイアウトペインとその子ノードの制約を調整します。
  2. 複数の異なるタイプのレイアウトペインを作成します。
  3. 別の組み込みレイアウトペインタイプを使用します。
  4. 独自のレイアウトペインタイプを作成します。

メソッドには、すべての子ノードのサイズを同じサイズにするかどうかを示すパラメーターがあります。すべての子ノードのサイズを同じサイズにするペインはTilePaneであるため、要素をレイアウトするためにそれを選択できます。A GridPaneはそれがサイズの要素と同じサイズに設定可能な制約があるためにも動作します。ストックHBoxは、すべての子要素のサイズを同じサイズにするプロパティがないため、直接機能しません。必要に応じて、HBoxをサブクラス化してこれを行うことができます(layoutChildren()をオーバーライドすることにより)。

サイジング

import javafx.application.Application;
import javafx.geometry.*;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.*;
import javafx.stage.Stage;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class SameSizeButtons extends Application {
    @Override
    public void start(Stage stage) {
        VBox layout = new VBox(
            10,
            createHorizontalButtonBox(
                Arrays.stream("All buttons the same width".split(" "))
                        .map(Button::new)
                        .collect(Collectors.toList()),
                Pos.CENTER,
                10,
                true
            ),
            createHorizontalButtonBox(
                Arrays.stream("All buttons different widths".split(" "))
                        .map(Button::new)
                        .collect(Collectors.toList()),
                Pos.CENTER_RIGHT,
                10,
                false
            )
        );
        layout.setPadding(new Insets(10));
        layout.getChildren().forEach(node ->
            node.setStyle("-fx-border-color: red; -fx-border-width: 1px;")
        );

        stage.setScene(new Scene(layout));
        stage.show();
    }

    public static Pane createHorizontalButtonBox(
            final List<Button> buttons,
            final Pos alignment,
            final double spacing,
            final boolean sameWidth) {

        return sameWidth
                ? createSameWidthHorizontalButtonBox(
                      buttons, 
                      alignment, 
                      spacing
                  )
                : createDifferentWidthHorizontalButtonBox(
                      buttons, 
                      alignment, 
                      spacing
                  );
    }

    private static Pane createSameWidthHorizontalButtonBox(
            List<Button> buttons,
            Pos alignment,
            double spacing)
    {
        TilePane tiles = new TilePane(
                Orientation.HORIZONTAL,
                spacing,
                0,
                buttons.toArray(
                        new Button[buttons.size()]
                )
        );
        tiles.setMinWidth(TilePane.USE_PREF_SIZE);
        tiles.setPrefRows(1);
        tiles.setAlignment(alignment);

        buttons.forEach(b -> {
            b.setMinWidth(Button.USE_PREF_SIZE);
            b.setMaxWidth(Double.MAX_VALUE);
        });

        return tiles;
    }

    private static Pane createDifferentWidthHorizontalButtonBox(
            List<Button> buttons,
            Pos alignment,
            double spacing)
    {
        HBox hBox = new HBox(
                spacing,
                buttons.toArray(
                        new Button[buttons.size()]
                )
        );
        hBox.setAlignment(alignment);

        buttons.forEach(b ->
                        b.setMinWidth(Button.USE_PREF_SIZE)
        );

        return hBox;
    }

    public static void main(String[] args) {
        launch(args);
    }
}  

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

JavaFXのボタンにテキストを垂直に表示するにはどうすればよいですか?

分類Dev

JavaFXでテキストを設定する代わりに、ボタンに画像を添付するにはどうすればよいですか?[FXMLなし]

分類Dev

javafxラインの色、幅を設定し、破線を同時に描画するにはどうすればよいですか?

分類Dev

JavaFX:ステージに応じて中央ノードを境界ペインの中央に配置するにはどうすればよいですか?

分類Dev

FXMLとJavaFXを使用して、トグルボタンを使用してブール変数を設定するにはどうすればよいですか?

分類Dev

javafxのステージでシーンを削除するにはどうすればよいですか?

分類Dev

JavaFX WebViewをシーンと同じ大きさに設定するにはどうすればよいですか?

分類Dev

JavaFX WebViewをシーンと同じ大きさに設定するにはどうすればよいですか?

分類Dev

javafxでラジオボタングループを使用するにはどうすればよいですか?

分類Dev

JavaFXを使用して、テーブルのロケールに依存する小数点を設定するにはどうすればよいですか?

分類Dev

ボタンをクリックするたびにタブのテキストに1を追加するにはどうすればよいですか?JavaFXで

分類Dev

ボタンをクリックするたびにタブのテキストに1を追加するにはどうすればよいですか?JavaFXで

分類Dev

JavaFxでタスクタイムアウトを設定するにはどうすればよいですか?

分類Dev

元の外観の閉じるボタンだけを使用してJavaFXでウィンドウを作成するにはどうすればよいですか?

分類Dev

同じスレッドでSWTシェルとJavaFxステージを使用するにはどうすればよいですか?

分類Dev

JavaFXで親のすべてのノードを取得するにはどうすればよいですか?

分類Dev

カスタムスキンをJavaFXアプリケーションのすべてのボタンで使用するように強制するにはどうすればよいですか?

分類Dev

Javafxを使用してTextFieldを一番上に設定するにはどうすればよいですか?

分類Dev

JavaFXで角を丸くしてTextAreaに設定するにはどうすればよいですか?

分類Dev

javafx TableViewの各行に個別に色を設定するにはどうすればよいですか?

分類Dev

JavaFXで複数列のコンボボックスを作成するにはどうすればよいですか?

分類Dev

javaee、javafx、jpaを使用してアプリケーションのレイヤーを適切に設定するにはどうすればよいですか?

分類Dev

javafxを使用してデータベースにアップロードするときに、選択した値のみをコンボボックスに表示するにはどうすればよいですか。

分類Dev

Intellijの同じjarにJavaFXアプリケーションと依存関係をエクスポートするにはどうすればよいですか?

分類Dev

フレームがUNdecoratedに設定されている場合、JAVAFXのAnchorpaneをドラッグ可能にするにはどうすればよいですか?

分類Dev

javaFXでボタンの画像を変更するにはどうすればよいですか?

分類Dev

直径3xpの円形のjavafxボタンを作成するにはどうすればよいですか?

分類Dev

JavaFXを使用してテーブルヘッダーのカスタムコントロールのサイズを適切に設定するにはどうすればよいですか?

分類Dev

Scene BuilderにインポートするようにJavaFXコントロールを設定するにはどうすればよいですか?

Related 関連記事

  1. 1

    JavaFXのボタンにテキストを垂直に表示するにはどうすればよいですか?

  2. 2

    JavaFXでテキストを設定する代わりに、ボタンに画像を添付するにはどうすればよいですか?[FXMLなし]

  3. 3

    javafxラインの色、幅を設定し、破線を同時に描画するにはどうすればよいですか?

  4. 4

    JavaFX:ステージに応じて中央ノードを境界ペインの中央に配置するにはどうすればよいですか?

  5. 5

    FXMLとJavaFXを使用して、トグルボタンを使用してブール変数を設定するにはどうすればよいですか?

  6. 6

    javafxのステージでシーンを削除するにはどうすればよいですか?

  7. 7

    JavaFX WebViewをシーンと同じ大きさに設定するにはどうすればよいですか?

  8. 8

    JavaFX WebViewをシーンと同じ大きさに設定するにはどうすればよいですか?

  9. 9

    javafxでラジオボタングループを使用するにはどうすればよいですか?

  10. 10

    JavaFXを使用して、テーブルのロケールに依存する小数点を設定するにはどうすればよいですか?

  11. 11

    ボタンをクリックするたびにタブのテキストに1を追加するにはどうすればよいですか?JavaFXで

  12. 12

    ボタンをクリックするたびにタブのテキストに1を追加するにはどうすればよいですか?JavaFXで

  13. 13

    JavaFxでタスクタイムアウトを設定するにはどうすればよいですか?

  14. 14

    元の外観の閉じるボタンだけを使用してJavaFXでウィンドウを作成するにはどうすればよいですか?

  15. 15

    同じスレッドでSWTシェルとJavaFxステージを使用するにはどうすればよいですか?

  16. 16

    JavaFXで親のすべてのノードを取得するにはどうすればよいですか?

  17. 17

    カスタムスキンをJavaFXアプリケーションのすべてのボタンで使用するように強制するにはどうすればよいですか?

  18. 18

    Javafxを使用してTextFieldを一番上に設定するにはどうすればよいですか?

  19. 19

    JavaFXで角を丸くしてTextAreaに設定するにはどうすればよいですか?

  20. 20

    javafx TableViewの各行に個別に色を設定するにはどうすればよいですか?

  21. 21

    JavaFXで複数列のコンボボックスを作成するにはどうすればよいですか?

  22. 22

    javaee、javafx、jpaを使用してアプリケーションのレイヤーを適切に設定するにはどうすればよいですか?

  23. 23

    javafxを使用してデータベースにアップロードするときに、選択した値のみをコンボボックスに表示するにはどうすればよいですか。

  24. 24

    Intellijの同じjarにJavaFXアプリケーションと依存関係をエクスポートするにはどうすればよいですか?

  25. 25

    フレームがUNdecoratedに設定されている場合、JAVAFXのAnchorpaneをドラッグ可能にするにはどうすればよいですか?

  26. 26

    javaFXでボタンの画像を変更するにはどうすればよいですか?

  27. 27

    直径3xpの円形のjavafxボタンを作成するにはどうすればよいですか?

  28. 28

    JavaFXを使用してテーブルヘッダーのカスタムコントロールのサイズを適切に設定するにはどうすればよいですか?

  29. 29

    Scene BuilderにインポートするようにJavaFXコントロールを設定するにはどうすればよいですか?

ホットタグ

アーカイブ