基于窗口大小百分比的 JavaFX 布局

San*_*ith 5 javafx javafx-8

我需要在 JavaFX 中创建一个带有 3 个标签的布局。每个标签应水平居中。第一个应放置在窗口下方 1/4 处,第二个应放置在中间位置(即垂直居中),第三个应放置在窗口下方 3/4 处。

如果调整窗口大小,标签应保持其相对位置。

这看起来很简单,但我不知道该怎么做。我尝试使用 VBox,但似乎没有办法很好地控制垂直放置。然后我查看了 AnchorPane,但不知道如何执行此操作。

有人可以向我展示一种使用 FXML 或以编程方式执行此操作的简单方法吗?

Jam*_*s_D 5

您可以使用 a 来完成此操作GridPane(可能还有其他方法)。用四行和一列填充它,并使用RowConstraints使每行具有相同的高度并对齐每行底部的标签。使用ColumnConstraints对象使标签水平居中。

SSCCE:

import javafx.application.Application;
import javafx.geometry.HPos;
import javafx.geometry.VPos;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.ColumnConstraints;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.RowConstraints;
import javafx.stage.Stage;

public class LayoutExample extends Application {

    @Override
    public void start(Stage primaryStage) {
        GridPane root = new GridPane();
        int numRows = 4 ;
        for (int i = 0 ; i < numRows ; i++) {
            RowConstraints rc = new RowConstraints();
            rc.setPercentHeight(100.0 / numRows);
            rc.setValignment(VPos.BOTTOM);
            root.getRowConstraints().add(rc);
        }
        ColumnConstraints cc = new ColumnConstraints();
        cc.setHalignment(HPos.CENTER);
        cc.setPercentWidth(100);
        root.getColumnConstraints().add(cc);

        for (int row = 0; row < 3 ; row++) {
            Label label = new Label("Label "+(row+1));
            root.add(label, 0, row);
        }

        Scene scene = new Scene(root, 400, 400);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述