Javafx GridPane,如何居中居中? (文字/标签)

时间:2018-11-05 03:55:31

标签: java javafx

我正在尝试学习我要参加的课程的Javafx。从HTML + ERB模板过渡到Javafx框架时遇到很多困难(我是Rails开发人员)。

由于某种原因,我无法将Label节点居中于网格窗格中。这是我的start方法:

@Override
    public void start(Stage stage) throws Exception {
        GridPane root = new GridPane();
        FlowPane leftbanner = new FlowPane();

        leftbanner.setPrefWidth(200);
        String bgStyle = "-fx-background-color: lightblue;"
                         + "-fx-background-radius: 0%;"
                         + "-fx-background-inset: 5px;";
        leftbanner.setStyle(bgStyle);

        root.add(leftbanner, 0, 0, 1, 1);
        root.add(createGridPane(), 1, 0, 1, 1);

        Scene scene = new Scene(root, 700, 500);
        stage.setTitle("Recommendify");
        stage.setScene(scene);
        stage.show();
    }

我正在使用createGridPane方法来构建我的应用程序。这是该方法的内容,其中包括我尝试将标签居中的位置

public GridPane createGridPane() {
        GridPane grid = new GridPane();
        grid.setPadding(new Insets(10));
        grid.setHgap(10);
        grid.setVgap(10);

        Text txt = new Text("Recommendify");
        txt.setFont(Font.font("Dialog", FontWeight.BOLD, 12));
        GridPane.setHalignment(txt, HPos.CENTER);

        grid.add(txt, 0, 0, 1, 1);
        grid.add(new Separator(), 0, 1, 3, 1);

        return grid;
}

我还尝试了以下发布在以下位置的解决方案:JavaFX alignment of Label in GridPane

我是否需要将此Label节点放入容器中以使其在GridPane中居中?像HBox或VBox一样?

1 个答案:

答案 0 :(得分:4)

您的代码实际上没有错。 “推荐”文本 位于其单元格的中心。但是,单元格的宽度不超过文本本身。

您可以通过在createGridPane()方法中打开网格线来看到此信息:

grid.setGridLinesVisible(true);

screenshot


要测试对齐方式,可以将ColumnConstraints添加到GridPane

grid.getColumnConstraints().add(new ColumnConstraints(150));

上面的语句将第一列的首选宽度设置为150。这是新结果:

screenshot 2

如您所见,Text节点正确居中。

  

编辑: 请记住,如果您想让Text居于添加到第二行的Separator上方,则需要有   它也跨越三列。

相关问题