GridPane 未居中对齐
GridPane doesn't align in center
我正在制作一个带有数字键盘的登录屏幕,但我似乎无法将窗格中的按钮的 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 代码很冗长,这个 post 编辑器不允许我 post 我的问题,所以我需要这些额外的行来让它接受我的问题。如果我认为我可以将我的代码缩减为 numberPad.setAlignment(Pos.Center) 并且仍然清楚我是如何尝试将我的 GridPane 居中的,我肯定会这样做。我非常感谢那些愿意花时间帮助我解决这个问题的人。
编辑 01:
我的问题是 GridPane 本身绘制在屏幕的左上角,而不是屏幕的中央。
您需要实际设置父容器的对齐方式。但是,Pane
不是执行此操作的有效容器。
如果您要使用 VBox
,您只需将其对齐方式设置为:
VBox root = new VBox(10);
root.setAlignment(Pos.CENTER);
这将使 VBox
的所有子项都位于中心。
Pos
枚举还提供了其他定位方式,例如TOP_CENTER
、TOP_LEFT
、BOTTOM_RIGHT
等。
我正在制作一个带有数字键盘的登录屏幕,但我似乎无法将窗格中的按钮的 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 代码很冗长,这个 post 编辑器不允许我 post 我的问题,所以我需要这些额外的行来让它接受我的问题。如果我认为我可以将我的代码缩减为 numberPad.setAlignment(Pos.Center) 并且仍然清楚我是如何尝试将我的 GridPane 居中的,我肯定会这样做。我非常感谢那些愿意花时间帮助我解决这个问题的人。
编辑 01:
我的问题是 GridPane 本身绘制在屏幕的左上角,而不是屏幕的中央。
您需要实际设置父容器的对齐方式。但是,Pane
不是执行此操作的有效容器。
如果您要使用 VBox
,您只需将其对齐方式设置为:
VBox root = new VBox(10);
root.setAlignment(Pos.CENTER);
这将使 VBox
的所有子项都位于中心。
Pos
枚举还提供了其他定位方式,例如TOP_CENTER
、TOP_LEFT
、BOTTOM_RIGHT
等。