Java 网格布局不';t尊重给定的行数和列数

Java 网格布局不';t尊重给定的行数和列数,java,swing,Java,Swing,我试图在JPanel中显示彩色JLabel的网格。我创建了一个扩展JPanel的自定义类PixelMatrix,并用扩展JLabel的自定义类Pixel填充它。 问题是:当我在PixelMatrix对象的GridLayout中放置像素对象时,我没有得到我想要的行数和列数 这是我的像素类: public class Pixel extends JLabel{ private Color color = null; private int dimension; p

我试图在JPanel中显示彩色JLabel的网格。我创建了一个扩展JPanel的自定义类PixelMatrix,并用扩展JLabel的自定义类Pixel填充它。 问题是:当我在PixelMatrix对象的GridLayout中放置像素对象时,我没有得到我想要的行数和列数

这是我的像素类:

public class Pixel extends JLabel{

    private Color color = null;
    private int dimension;
    
    public Pixel(Color c, int dim) {
        this.setPreferredSize(new Dimension(dim, dim));
        this.dimension = dim;
        this.color = c;
        this.setBackground(color);
        this.setOpaque(true);
    }
    
    public Pixel(int dim) {
        this(new Color(0x000000), dim);
    }
    
    public Color getColor() {
        return color;
    }
    
    public void setColor(Color c) {
        color = c;
    }
}
 
这是我的PixelMatrix类:

public class PixelMatrix extends JPanel{

    private int resolution;
    private Pixel[][] pixels = null;
    private GridLayout layout;
    
    public PixelMatrix(int res) {
        resolution = res;
        layout = new GridLayout(0, res);
        
        pixels = new Pixel[res][res];
        for(int x = 0; x < res; x++) {
            for(int y = 0; y < res; y++) {
                pixels[x][y] = new Pixel(50);
                this.add(pixels[x][y]);
            }
        }
    }
}
这就是我得到的。我不明白我做错了什么。

我创建了一个自定义类PixelMatrix,它扩展了JPanel

那没什么用。这只是创建了一个变量

默认的布局管理器是
流程布局
,该布局尚未更改。组件一个接一个地流动,并环绕到下一行

如果要使用
GridLayout
,则需要设置面板的布局

所以你可以做:

layout = new GridLayout(0, res);
setLayout( layout );
或者,更简单的是,不用麻烦使用变量:

setLayout( new GridLayout(0, res) );

另外,为什么要将变量称为“resolution”。该术语通常用于“以像素为单位的屏幕分辨率”。布局与分辨率无关。您试图在网格中指定“列”,这将是一个更好的变量名。

我创建了布局,但忘了设置,这太尴尬了:)谢谢!
layout = new GridLayout(0, res);
setLayout( layout );
setLayout( new GridLayout(0, res) );