GridPane不在中心对齐

时间:2018-07-31 23:37:29

标签: java javafx alignment gridpane

我正在使用数字键盘制作登录屏幕,但似乎无法在窗格中居中对齐按钮的GridPane。我在做什么错了?

Main.java

import javafx.application.Application;
import javafx.geometry.Rectangle2D;
import javafx.scene.Scene;
import javafx.scene.input.KeyCombination;
import javafx.stage.Screen;
import javafx.stage.Stage;

public class Main extends Application {

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

    public void start(Stage primaryStage) throws Exception{

        Rectangle2D bounds = Screen.getPrimary().getBounds();
        LoginScreen loginScreen = new LoginScreen(bounds.getWidth(), bounds.getHeight());

        Scene scene = new Scene(loginScreen.get());

        primaryStage.setScene(scene);
        primaryStage.setFullScreenExitKeyCombination(KeyCombination.NO_MATCH);
        primaryStage.show();
        primaryStage.setFullScreen(true);
    }
}

LoginScreen.java

import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.control.Button;
import javafx.scene.layout.*;
import javafx.scene.paint.Color;

public class LoginScreen {
    private Pane root;
    private GridPane numberPad;

    public LoginScreen(double screenWidth, double screenHeight){
        root = new Pane();
        root.setPrefSize(screenWidth, screenHeight);
        root.setBackground(new Background(new BackgroundFill(Color.AQUA, CornerRadii.EMPTY, Insets.EMPTY)));

        numberPad = new GridPane();

        Button button01 = new Button("1");
        Button button02 = new Button("2");
        Button button03 = new Button("3");
        Button button04 = new Button("4");
        Button button05 = new Button("5");
        Button button06 = new Button("6");
        Button button07 = new Button("7");
        Button button08 = new Button("8");
        Button button09 = new Button("9");

        numberPad.setAlignment(Pos.CENTER);

        numberPad.add(button01, 0, 0);
        numberPad.add(button02, 1, 0);
        numberPad.add(button03, 2, 0);
        numberPad.add(button04, 0, 1);
        numberPad.add(button05, 1, 1);
        numberPad.add(button06, 2, 1);
        numberPad.add(button07, 0, 2);
        numberPad.add(button08, 1, 2);
        numberPad.add(button09, 2, 2);

        root.getChildren().addAll(numberPad);

    }

    public Pane get(){
        return root;
    }
}

GUI代码很冗长,并且该帖子编辑器不允许我直接发布我的问题,因此我需要这些额外的行来使它接受我的问题。如果我认为我可以将代码缩减为numberPad.setAlignment(Pos.Center),并且仍然清楚地说明我将如何使GridPane居中,那我肯定会。我衷心感谢那些愿意花时间帮助我解决这个问题的人。

编辑01:

我的问题是GridPane本身绘制在屏幕的左上角而不是屏幕的中心。

1 个答案:

答案 0 :(得分:2)

您需要实际设置父容器的对齐方式。 Pane不是执行此操作的有效容器。

如果要改用VBox,则只需将其对齐方式设置为:

VBox root = new VBox(10);
root.setAlignment(Pos.CENTER);

这将导致VBox的所有子代都放置在中心。

Pos枚举还提供其他定位方法,例如,包括TOP_CENTERTOP_LEFTBOTTOM_RIGHT