当前位置: 首页 > 知识库问答 >
问题:

GridPane未在中心对齐

百里涛
2023-03-14

我正在用数字键盘制作登录屏幕,我似乎不能在窗格中对齐按钮的网格窗格。我做错了什么?

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);
    }
}
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代码很冗长,而且这个帖子编辑器不允许我按原样发布问题,所以我需要这些额外的行让它接受我的问题。如果我认为我可以把代码缩减到数字广告。设置对齐(Pos.Center),并且仍然清楚地表明我是如何尝试将网格窗格居中的。我真诚地感谢那些可能借给我时间帮助我解决这个问题的人。

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

共有1个答案

赵涵亮
2023-03-14

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

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

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

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

Posenum还提供其他定位方法,例如,包括TOP\u CENTERTOP\u LEFTBOTTOM\u RIGHT

 类似资料:
  • 我不明白为什么设置Label.setAlignment(Pos.CENTER_RIGHT)不会影响标签的对齐,然后将其添加到GridPane中?唯一的方法似乎是通过网格(例如列约束)或将标签添加到具有正确对齐的HBox。 为什么将标签的对齐方式设置为CENTER_RIGHT不起作用?我可以看到API说:“指定当标签中有空白时,标签中的文本和图形应该如何对齐。但是,如何在标签中获取空白区域?

  • 我已经创建了两个Javafx网格窗格,我希望它们处于相同的位置,第二个网格窗格必须位于第一个网格窗格旁边的相同位置。因为我跑步时一个接一个。这是我的代码:

  • 如何使用< code>GridPane上的权重设置行/列大小? 例如,如果我想要五行,其中三行是未知的固定大小,一行占用剩余空间的三分之一,另一行占用剩余空间的三分之二(见下图),我该如何实现呢? 我查看了使用,其中两个有但这只允许平均共享剩余空间。 我尝试使用百分比,因为我在文档< code >中看到,如果widthPercent(或heightPercent)值的总和大于100,这些值将被视为

  • 我是JavaFx新手,我在FXMl中创建了两个gridPane,我想用JavaFx做同样的事情。 我想创建一个扩展GridPane的类,所以当我调用我的类时,我将得到与fxml PS中相同的结果:如果您使用的是SceneBuilder,请检查网格线是否可见,以便可以看到所有GridPane谢谢

  • 我用JavaFX做了一个国际象棋棋盘,并把所有的方格设置为GridPane的子方格,有没有办法用GridPane索引来访问这些方格并改变它们的属性? 我尝试通过磁贴矩阵访问一个磁贴来更改磁贴的颜色属性,但它不会更改 GridPane 中显示的磁贴。 的。getChildren()方法返回一个节点列表,一旦tile对象成为节点,我就无法访问它的方法。 这是我的磁贴类: } 这是我的董事会课:

  • 我正在使用支持库中的DividerItemDecoration。 下面是添加装饰的代码 但分隔线并不是水平地出现在中心。