【问题标题】:JavaFX, can't get GridPane to fit in the center of BorderPaneJavaFX,无法让 GridPane 适合 BorderPane 的中心
【发布时间】:2016-08-25 05:56:23
【问题描述】:

我正在开发一个数独应用程序,但我遇到了一个阻碍我进步的问题。我想要做的是制作我用循环创建的这个数独板,它将一个标签添加到 StackPane 中,并且 StackPane 进入它的指定位置进入 GridPane。所以我试图强迫这个董事会有一个固定的大小,而不是超过那个点。

我整个晚上都在研究和尝试不同的事情,例如将 GridPane 放入 AnchorPane 并尝试将 AnchorPane 放在 BorderPane 的中心,但是当您使用时,它似乎总是超出窗口之外数独板的行和列太多。

我要做的是为所有板设置一个尺寸,因此如果需要它会拉伸到那个点,或者如果需要它会缩小。所附图片使用的是 BorderPane,中间有一个 GridPane。您可以看到 16x16 非常适合,而 25x25 刚好在窗外。

我们将不胜感激。

尝试创建 25x25 时窗口的外观图片。

http://i.imgur.com/BrJrpiY.png

尝试创建 16x16 时窗口的外观图片。 这也是使用插图将其推向顶部,因此它看起来不会太不合适。

http://i.imgur.com/7a0QJx8.jpg

【问题讨论】:

    标签: java javafx gridpane borderpane


    【解决方案1】:

    您所要做的就是设置网格约束以满足您的需求。为此,将Labels 放入GridRow(不需要StackPane)并将它们的vAlignment 和hAlignment 设置为Center。然后设置标签的vGrow和hGrow为Priority.ALWAYS

    public class Main extends Application {
    
        @Override
        public void start(Stage primaryStage) {
    
            GridPane gridPane = createMainGrid(2, 2);
            gridPane.setAlignment(Pos.CENTER);
            gridPane.setHgap(10);
            gridPane.setVgap(10);
    
            Scene scene = new Scene(gridPane);
            primaryStage.setScene(scene);
            primaryStage.show();
        }
    
        private GridPane createMainGrid(int rows, int columns) {
            GridPane grid = new GridPane();
    
            for (int colIdx = 0; colIdx < columns; colIdx++) {
                for (int rowIdx = 0; rowIdx < rows; rowIdx++) {
                    GridPane innerGrid = createGrid(4, 4);
                    grid.add(innerGrid, colIdx, rowIdx);
                    GridPane.setConstraints(innerGrid, colIdx, rowIdx, 1, 1, HPos.CENTER, VPos.CENTER, Priority.ALWAYS, Priority.ALWAYS);
                }
            }
            return grid;
        }
    
        private GridPane createGrid(int rows, int columns) {
            GridPane grid = new GridPane();
    
            Random random = new Random();
    
            for (int colIdx = 0; colIdx < columns; colIdx++) {
                for (int rowIdx = 0; rowIdx < rows; rowIdx++) {
                    Label label = new Label(String.valueOf(random.nextInt(rows * columns)));
                    label.setMinSize(30, 30);
                    label.setAlignment(Pos.CENTER);
                    grid.add(label, colIdx, rowIdx);
                    GridPane.setConstraints(label, colIdx, rowIdx, 1, 1, HPos.CENTER, VPos.CENTER, Priority.ALWAYS, Priority.ALWAYS);
                }
            }
            return grid;
        }
    
        public static void main(String[] args) {
            launch(args);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-28
      • 2013-01-23
      • 1970-01-01
      • 2019-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多