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

创建一个gridpane以灵活地调整其大小

居星阑
2023-03-14

我正在为自己的一个项目一个游戏叫集合。它是一个与不同的牌相匹配的游戏,每一张牌都有形状、颜色或形状的数量。我试图创建一个网格窗格,它可以灵活地容纳一个形状,或者最多容纳3个形状。我创建了一个3×3的gridpane,并且已经创建了数组来选择随机的形状、颜色或数字。然而,我一直在苦苦思索如何创建一个gridpane,其中每个网格可以灵活地容纳形状的数量。这是我当前的代码。方法setCards扩展了BorderPane。这里我正在使用圆圈来测试布局。这个场景是999x999,它是一个3x3的网格。这是一个屏幕截图,它看起来像目前,它真的让我困惑为什么。如有任何帮助,我们将不胜感激。附上图片


import javafx.geometry.Insets;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.ColumnConstraints;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.RowConstraints;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;

import java.util.concurrent.ThreadLocalRandom;
import javafx.scene.control.Button;
import java.util.*;
public class SetCards extends BorderPane{
    
    private GridPane cards;
    private Button checkSet;
    private Button findSets;
    private Button replaceEmptyPanes;
    private VBox menu;
    private HBox[][] num1;
    private int row, col;
    private Circle cir;
    public SetCards(){
    
        //set up gridpane

        menu = new VBox();
        
        num1 = new HBox[9][9];
        
        cards = new GridPane();
        
        
        for(col = 0; col < 3; col++) {
            for(row = 0; row < 3; row++) {
                
                cir = new Circle(40);
                
                cir.setFill(Color.RED);
                
                cir.setStroke(Color.BLACK);
                
                cir.setStrokeWidth(2);
                
                cir.setCenterY(col);
                cir.setCenterX(row);
                
                num1[col][row] = new HBox();
                
                num1[col][row].getChildren().addAll(cir);
                
                cards.add(num1[col][row],col, row);
            }
        }
        
        checkSet = new Button("Check Set");
        
        findSets = new Button("Find Set");
        
        replaceEmptyPanes = new Button("Replace Cards");
        
        cards.getColumnConstraints().add(new ColumnConstraints(333));
        
        cards.getRowConstraints().add(new RowConstraints(333));
        
        menu.setSpacing(40);
        
        menu.setPadding(new Insets(20, 20, 20, 20));
        
        menu.setStyle("-fx-border-color: black");
        
        menu.getChildren().addAll(checkSet, findSets, replaceEmptyPanes);
        
        this.setLeft(menu);
        
        this.setCenter(cards);
        
        
        
    }
}

共有1个答案

姚钊
2023-03-14

仅为第一行和第一列设置约束。必须为要配置的每一行和每列添加约束。查看文档,您可以只执行一个循环来设置所有约束:

for(int i=0; i<3; i++){
    cards.getColumnConstraints().add(new ColumnConstraints(333));
    cards.getRowConstraints().add(new RowConstraints(333));
}
 类似资料:
  • 我正在尝试使用两列创建一个具有特定布局的窗口,但我不能完全按照我想要的方式工作。 首先,一些简化的示例代码: 以下是我想要的: 微调器和按钮应使用所有可用宽度 我试着使用各种各样的限制,但我无法让一切都正常工作。我认为我发现的主要问题是,在让微调器使用可用宽度后,它们在缩小窗口时拒绝收缩。 我正在Linux中使用Oracle JDK 1.8.0\u 60。

  • 我是JavaFX的新手,目前我试图构建一个小型聊天窗口。为此,我为我的Listview获得了以下自定义单元格布局。 网格 我使用外部HBox,所以我可以像whatsapp一样对齐消息。。。(左右对齐)。在我的GridPane中,我得到了两列,消息(标签)在左侧,其他一些随机的东西在右侧(时间戳,一些小图标)。现在我需要的是:GridPane/左列/标签的高度应该根据文本消息的长度动态地增长/收缩。

  • 我正在用JavaFX写一个程序 硼烷- 我希望能够添加尽可能多的行到gridpane,并让scrollpane自动扩展自己。 注意:我有一些很长的文件,所以我只包括重要的部分。如果您需要整个FXML或Controller文件,请给我留言。 以下是我的gridpane/scrollpane的FXML: 我有以下代码在我的控制器内的FXML 谢谢大家的帮助! 瑞恩

  • 我的场景中有一个对象。我希望能够调整窗口的大小,并与它一起调整窗格的大小。我还想在窗格旁边放置一个。 到目前为止,我已经成功地生成了一个完全可调整大小的或一个,其中包含和对象,但当我调整窗口大小时,窗格不会随之调整大小。 以下是带有锚烷的FXML: 只有的版本基本上就是版本中使用的代码,但具有和属性。 如何制作一个场景,使其具有可调整大小的和?

  • 我真的开始使用LWJGL(我刚刚开始),我专注于一件事:当我创建一个窗口并且我想将其设置为不可调整大小时,我使用: 然而,即使我想在创建窗口后设置它,我也不知道如何设置。我只是尝试在创建窗口后放置命令,但它不起作用: 那么,我该如何解决这个问题呢?