Java GridLayout面板添加时不考虑尺寸

Java GridLayout面板添加时不考虑尺寸,java,swing,jpanel,grid-layout,Java,Swing,Jpanel,Grid Layout,我目前正在编写一个java项目,我需要一个JPanel命名板来包含一些本身就是JPanel的Tile,我将它们添加到适当大小的布局中,但是当我在JFrame的grouplayout中添加所有按钮时,只有第一个Tile具有适当的大小,还有一些则是荒谬的尺寸,比如1p宽,50p高,或者1*1p 我不觉得我错过了任何东西,所有东西都添加到JFrame中,并添加到正确的布局中,具有正确的行数和行数,并且在Tile类中将大小设置为50*50p。以下是一些包含图形设置的代码段,特别是构造函数: Tile.j

我目前正在编写一个java项目,我需要一个JPanel命名板来包含一些本身就是JPanel的Tile,我将它们添加到适当大小的布局中,但是当我在JFrame的grouplayout中添加所有按钮时,只有第一个Tile具有适当的大小,还有一些则是荒谬的尺寸,比如1p宽,50p高,或者1*1p

我不觉得我错过了任何东西,所有东西都添加到JFrame中,并添加到正确的布局中,具有正确的行数和行数,并且在Tile类中将大小设置为50*50p。以下是一些包含图形设置的代码段,特别是构造函数:

Tile.java:

class Case extends JPanel
{

private int _color;
private boolean _star;
private Case _casePere;
private ArrayList<Case> _fils;
private int _x,_y;

public Case(int x, int y)
{
    _color = 0;
    _star = false;
    _casePere = null;
    _fils = new ArrayList<Case>();
    _x = x;
    _y = y;
    setPreferredSize(new Dimension(50,50));
    setMinimumSize(new Dimension(50,50));
    setBackground(Color.WHITE);
}
class Case扩展了JPanel
{
私人国际色彩;
私有布尔星;
私人案件;
私人阵列列表;
私人机构;
公共案例(整数x,整数y)
{
_颜色=0;
_星=假;
_casePere=null;
_fils=新的ArrayList();
_x=x;
_y=y;
设置首选尺寸(新尺寸(50,50));
设置最小尺寸(新尺寸(50,50));
挫折地面(颜色:白色);
}
Board.java:

class Board extends JPanel{

private Case[][] _grid;
private Case[] _starsp1;
private Case[] _starsp2;

// constructeur
public Board(int nbStars, int length){



    _grid = new Case[length][length];
    _starsp1 = new Case[nbStars];
    _starsp2 = new Case[nbStars];

    //graphisme
    Dimension d = new Dimension(50*length, length*50);

    setBackground(Color.BLACK);
    setPreferredSize(d);


    GridLayout layout = new GridLayout(Constante.length, Constante.length,2 ,2);
    setLayout(layout);

    for(int y=0; y<length; ++y)
    {
        for(int x=0; x<length; ++x)
        {

            _grid[x][y] = new Case(x,y);
            add(_grid[x][y]);
        }
    }
类板扩展JPanel{
私人案例[][]\u网格;
私人案件[]_starsp1;
私人案件[]_starsp2;
//建设者
公共董事会(国际标准,国际长度){
_网格=新案例[长度][长度];
_starsp1=新案例[nbStars];
_starsp2=新案例[nbStars];
//笔画
尺寸d=新尺寸(50*长度,长度*50);
挫折背景(颜色:黑色);
设置首选大小(d);
GridLayout=新的GridLayout(恒定长度,恒定长度,2,2);
设置布局(布局);
对于(int y=0;y
不要设置板的首选尺寸。板的布局管理器将根据添加到网格中的组件数量和添加的最大组件的尺寸来确定首选尺寸

注意,(基于下一行)您希望计算不包括的每个组件之间的间距为2像素。因此,让布局管理器完成其工作

GridLayout layout = new GridLayout(Constante.length, Constante.length,2 ,2);
我们不知道Constante.length是什么。您将一个长度变量传递给您的类,因此使用该变量

另外,为什么您的
Case
类有这么多实例变量?这些变量从未在发布的代码中使用过。因此,您可能有其他方法导致布局出现问题。例如,不要重写
getX()
getY()
这些方法由布局管理器使用

不要设置板的首选尺寸。板的布局管理器将根据添加到网格中的组件数量和添加的最大组件的尺寸来确定首选尺寸

注意,(基于下一行)您希望计算不包括的每个组件之间的间距为2像素。因此,让布局管理器完成其工作

GridLayout layout = new GridLayout(Constante.length, Constante.length,2 ,2);
我们不知道Constante.length是什么。您将一个长度变量传递给您的类,因此使用该变量


另外,为什么您的
案例
类有这么多实例变量?这些变量从未在发布的代码中使用过。因此,您可能有其他方法导致布局出现问题。例如,不要重写
getX()
getY()
布局管理器使用这些方法。

发布一个演示问题的正确方法。即创建一个仅包含板面板及其子级的框架。首先使该部分代码正常工作,然后添加其他组件。发布一个演示问题的正确方法。即创建一个仅包含板面板及其子级的框架孩子们。首先让那部分代码工作,然后添加其他组件。这两个长度是相同的,因为构造函数是用Constante.length调用的,这有点混乱,抱歉,这是试图调试布局问题的结果,抱歉。至于变量,Board和Case中的其他方法不做任何相关的事情ted对图形进行了修改,所以我把它们取出来,使代码段简短,也许我应该清理无用的变量,抱歉,因为这两个长度是相同的,因为构造函数是用Constante.length调用的,这有点混乱,抱歉,这是试图调试布局问题的结果,抱歉。至于变量,Boa中的其他方法rd和Case不做任何与图形相关的事情,所以我把它们拿出来,让代码段简短一些,也许我应该清理掉无用的变量,再次抱歉