JavaFX:将GridPane单元格置于所需的垂直位置

时间:2016-06-09 13:07:13

标签: javafx

我想要的行为是fieldPanetable旁边垂直居中,但两者是顶部对齐的(在bigGrid行0中)。为什么会这样?我该怎么做?

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


public class Main extends Application {
    @Override
    public void start(Stage stage) {


        TableView table = new TableView();

        GridPane fieldPane = new GridPane();
        Button addButton = new Button("Add Crew"), 
                updateButton = new Button("Update Crew");
        Label crewIdLabel = new Label("Crew ID"),
                crewNameLabel = new Label("Crew Name");
        TextField crewIdText = new TextField(),
                crewNameText = new TextField();
        fieldPane.setHgap(10);
        fieldPane.setVgap(10);
        fieldPane.addRow(0, crewIdLabel, crewIdText);
        fieldPane.addRow(1, crewNameLabel, crewNameText);

        GridPane bigPane = new GridPane();
        bigPane.setHgap(10);
        bigPane.setVgap(10);
        bigPane.add(table, 0, 0, 2, 1);
        bigPane.add(fieldPane, 2, 0, 2, 1);
        GridPane.setValignment(fieldPane, VPos.CENTER);
        bigPane.add(addButton, 1, 1, 1, 1);
        GridPane.setHalignment(addButton, HPos.RIGHT);
        bigPane.add(updateButton, 3, 1, 1, 1);
        GridPane.setHalignment(updateButton, HPos.RIGHT);

        Scene scene = new Scene(bigPane);
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }

}

1 个答案:

答案 0 :(得分:1)

fieldPane正在bigPane填充其单元格的全部内容,因为您可以通过在其上放置边框来检查。由于fieldPane内部有额外的空间,超出了保留其内容所需的空间,因此fieldPane中的单元格需要位于该额外空间内。默认对齐方式是左上角;改变你可以做到

fieldPane.setAlignment(Pos.CENTER);

或者,您可以阻止fieldPane增长以使用

填充整个单元格
GridPane.setFillHeight(fieldPane, false);

然后因为你已经

GridPane.setValignment(fieldPane, VPos.CENTER);

fieldPane将在其网格单元格中居中。