我想要的行为是fieldPane
在table
旁边垂直居中,但两者是顶部对齐的(在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);
}
}
答案 0 :(得分:1)
fieldPane
正在bigPane
填充其单元格的全部内容,因为您可以通过在其上放置边框来检查。由于fieldPane
内部有额外的空间,超出了保留其内容所需的空间,因此fieldPane
中的单元格需要位于该额外空间内。默认对齐方式是左上角;改变你可以做到
fieldPane.setAlignment(Pos.CENTER);
或者,您可以阻止fieldPane
增长以使用
GridPane.setFillHeight(fieldPane, false);
然后因为你已经
了GridPane.setValignment(fieldPane, VPos.CENTER);
fieldPane
将在其网格单元格中居中。