Java 网格布局不';t尊重给定的行数和列数
我试图在JPanel中显示彩色JLabel的网格。我创建了一个扩展JPanel的自定义类PixelMatrix,并用扩展JLabel的自定义类Pixel填充它。 问题是:当我在PixelMatrix对象的GridLayout中放置像素对象时,我没有得到我想要的行数和列数 这是我的像素类: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
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) );