JavaFX 如何使 HBox 仅使用 VBox 内所需的宽度

Has*_*sen -1 javafx

我有一个HBox内部 a VBox,虽然大多数问题似乎都在问如何使用它所包含的HBox整个宽度VBox,但我要求相反。我的里面有按钮,其HBox数量不断变化,因此HBox应该不断改变它的大小,但是在向 中添加背景颜色后,HBox很明显它占据了 的整个宽度VBox,使其无法居中。

它目前类似于顶部示例,但我需要它类似于底部示例:

在此输入图像描述

并使用

HBox.setHgrow(wordButtonsBox, Priority.NEVER);
Run Code Online (Sandbox Code Playgroud)

也没有改变任何东西..

public class CentreStuff extends Application {

@Override
public void start(Stage primaryStage) {
    primaryStage.setScene(new Scene(createContent()));
    primaryStage.show();
}

private Region createContent() {
    HBox buttonBox1 = new HBox(new Button("Button1"), new Button("Button2"), new Button("Button3"), new Button("Button4"));
    buttonBox1.setStyle("-fx-border-color: red;");
    VBox results = new VBox(10, buttonBox1);
    return results;
}
Run Code Online (Sandbox Code Playgroud)

Jam*_*s_D 5

有两种方法,效果略有不同,具体取决于 中的其他内容VBox

  1. results.setFillWidth(false);
    
    Run Code Online (Sandbox Code Playgroud)将尝试将所有VBox 内容的大小 调整为其首选宽度,无论VBox. 如果可能的话,将其设置为true(默认值)会将 的VBox内容调整为 的宽度VBox
  2. buttonBox1.setMaxWidth(Region.USE_PREF_WIDTH);
    
    Run Code Online (Sandbox Code Playgroud) 将防止HBox比其首选宽度更宽,因此这将使 保持HBox其首选宽度。如果您需要的话,此解决方案将允许 中的其他组件的VBox大小调整为 的宽度。VBox
public class CentreStuff extends Application {

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setScene(new Scene(createContent()));
        primaryStage.show();
    }

    private Region createContent() {
        HBox buttonBox1 = new HBox(new Button("Button1"), new Button("Button2"), new Button("Button3"), new Button("Button4"));
        buttonBox1.setStyle("-fx-border-color: red;");
        VBox results = new VBox(10, buttonBox1);
        results.setFillWidth(false);
        return results;
    }
}
Run Code Online (Sandbox Code Playgroud)

或者

public class CentreStuff extends Application {

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setScene(new Scene(createContent()));
        primaryStage.show();
    }

    private Region createContent() {
        HBox buttonBox1 = new HBox(new Button("Button1"), new Button("Button2"), new Button("Button3"), new Button("Button4"));
        buttonBox1.setStyle("-fx-border-color: red;");
        buttonBox1.setMaxWidth(Region.USE_PREF_SIZE);
        VBox results = new VBox(10, buttonBox1);
        return results;
    }
}
Run Code Online (Sandbox Code Playgroud)