A GridPane
выравнивает узлы в одной и той же строке / столбце и (при условии, что не используются интервалы между строками / столбцами, кроме 1) гарантирует, что узлы, расположенные в разных строках / столбцах, не перекрывают диапазон, занимаемый узлом по вертикали / горизонтали.
Вы пытаетесь выровнять Label
s / TextField
s и Button
s независимо, хотя это не работает, по крайней мере, если вы не усложняете задачу.
Вместо использования GridPane
, я рекомендую просто использовать VBox
, содержащий вместо 2 HBox
es:
@Override
public void start(Stage primaryStage) throws Exception {
HBox textFieldContainer = new HBox(
new Label("Text1:"),
new TextField(),
new Label("Text2:"),
new TextField(),
new Label("Text3:"),
new TextField());
textFieldContainer.setSpacing(6);
textFieldContainer.setAlignment(Pos.CENTER_LEFT);
// add margin to all but the first Label/TextField pairs
Insets innerLabelInsets = new Insets(0, 0, 0, 20);
List<Node> children = textFieldContainer.getChildren();
for (int i = 2, size = children.size(); i < size; i +=2) {
HBox.setMargin(children.get(i), innerLabelInsets);
}
Button bt1 = new Button("Button");
bt1.setMinSize(70, 0);
Button bt2 = new Button("Button");
bt2.setMinSize(70, 0);
Button bt3 = new Button("Button");
bt3.setMinSize(70, 0);
HBox buttonContainer = new HBox(bt1, bt2, bt3);
buttonContainer.setSpacing(6);
VBox pane = new VBox(textFieldContainer, buttonContainer);
pane.setPadding(new Insets(11.5, 12.5, 13.5, 14.5));
pane.setSpacing(7);
Scene scene = new Scene(pane);
primaryStage.setScene(scene);
primaryStage.show();
}