如何在HBox左,中,右对齐儿童

Pro*_*Rev 6 java javafx

我有一个孩子的HBox设置如下:

HBox h = new HBox();
h.setMinWidth(555);

Label leftLabel = new Label("Left");
Label centerLabel = new Label("Center");

HBox rightContent = new HBox();
Label r1 = new Label("2");
Label r2 = new Label("3");

rightContent.getChildren().addAll(r1, r2);
h.getChildren().addAll(leftLabel, centerLabel, rightContent);
Run Code Online (Sandbox Code Playgroud)

这将创建一个HBox,左边是所有孩子.我想leftLabel是在左边,centerLabel在该中心,并rightContent最右端.

我怎样才能做到这一点?

谢谢大家.

Max*_*kov 16

您可以使用以下技巧:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.scene.layout.Region;
import javafx.stage.Stage;


public class Main23 extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        Label label1 = new Label("Left");
        label1.setStyle("-fx-background-color: red; -fx-text-fill: white;");

        Label label2 = new Label("Center");
        label2.setStyle("-fx-background-color: green; -fx-text-fill: white;");

        Label label3 = new Label("Right");
        label3.setStyle("-fx-background-color: blue; -fx-text-fill: white;");

        Region region1 = new Region();
        HBox.setHgrow(region1, Priority.ALWAYS);

        Region region2 = new Region();
        HBox.setHgrow(region2, Priority.ALWAYS);

        HBox hBox = new HBox(label1, region1, label2, region2, label3);

        primaryStage.setScene(new Scene(hBox, 640, 240));
        primaryStage.show();
    }
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我只是Region为标签之间的填充空间添加了几个控件,并将Hgrow属性设置为ALWAYS.

在此输入图像描述

这种技巧在某些情况下是合适的,因为有时你不能使用其他布局,即如果你想对齐里面的按钮ToolBar.

  • 这样做的问题是,如果左侧和右侧的大小不同,则中心实际上不会位于中间。另外,如果某些组件动态添加到左侧或右侧,则中心组件将出现位置跳跃。 (2认同)