4

我正在做一个项目,我需要让两个按钮绝对集中在场景中。我还没有找到任何内置窗格选项来完成这项工作,所以我不得不使用很多绑定。代码真的很长,我很确定有一种更简单的方法来完成这项工作。这是一个演示:http ://screencast.com/t/pvi5WLko

所以我想知道的是,是否有一种简单的方法可以做同样的事情,最好是使用内置窗格或其他东西。

无论窗口大小如何调整,我都希望按钮居中。例子:

在此处输入图像描述

4

1 回答 1

1

可能最简单的方法是使用 VBox:

public void start(final Stage stage) throws Exception {
    final Button button0 = new Button("Start learning");
    final Button button1 = new Button("Customize");

    final VBox box = new VBox();
    box.setFillWidth(true);

    box.getChildren().setAll(button0, button1);
    box.setAlignment(Pos.CENTER);

    stage.setScene(new Scene(box));
    stage.setWidth(200);
    stage.setHeight(100);
    stage.show();
}

另一种可能的方法是使用 GridPane:

public void start(final Stage stage) throws Exception {
  final Button button0 = new Button("Start learning");
  final Button button1 = new Button("Customize");

  final GridPane cPane = new GridPane();
  cPane.getChildren().addAll(button0, button1);
  GridPane.setConstraints(button0, 0, 0, 1, 1, HPos.CENTER, VPos.CENTER);
  GridPane.setConstraints(button1, 0, 1, 1, 1, HPos.CENTER, VPos.CENTER);

  final ColumnConstraints columnn0 = new ColumnConstraints();
  columnn0.setPercentWidth(100);
  cPane.getColumnConstraints().addAll(columnn0);

  final RowConstraints row0 = new RowConstraints(1);
  row0.setPercentHeight(50);

  final RowConstraints row1 = new RowConstraints(1);
  row1.setPercentHeight(50);

  cPane.getRowConstraints().addAll(row0, row1);

  stage.setScene(new Scene(cPane));
  stage.setWidth(200);
  stage.setHeight(100);
  stage.show();
}

这里的想法是配置网格中的行和列以使用相应的约束对象填充您的场景。上面定义了一列和两行。然后,您可以使用 GridPane.setConstraints(...) 在 Grid 的单元格中对齐组件。

您可能需要稍微更改代码以使顶部按钮与 VPos.BOTTOM 对齐,而下部按钮与 VPos.TOP 对齐,具体取决于您是否希望按钮粘在一起(然后您必须为两者定义一个边距,当然)。

于 2012-11-03T10:27:53.633 回答