绝对布局 - 按钮居中

时间:2012-11-03 09:56:40

标签: java layout javafx-2

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

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

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

enter image description here

1 个答案:

答案 0 :(得分: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对齐,具体取决于您是否希望按钮粘在一起(然后您必须定义边距)当然,对于两者而言。