【发布时间】:2021-03-08 15:06:09
【问题描述】:
我正在尝试在 JPanel 中显示彩色 JLabels 网格。我创建了一个扩展 JPanel 的自定义类 PixelMatrix,并使用扩展 JLabel 的自定义类 Pixel 填充它。 问题是:当我将 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]);
}
}
}
}
这是用于显示所有内容的类:
public class EditorPanel extends JPanel{
private BorderLayout layout = new BorderLayout();
private JMenuBar menuBar = new JMenuBar();
private JMenu fileMenu = new JMenu("File");
private JMenu settingsMenu = new JMenu("Settings");
private JMenu sizeSubMenu = new JMenu("Size");
private JMenuItem newItem = new JMenuItem("New");
private JMenuItem openItem = new JMenuItem("Open...");
private JMenuItem saveItem = new JMenuItem("Save");
private JRadioButtonMenuItem size6x6Item = new JRadioButtonMenuItem("6 x 6", true);
private JRadioButtonMenuItem size8x8Item = new JRadioButtonMenuItem("8 x 8");
private ButtonGroup sizeButtonGroup = new ButtonGroup();
private PixelMatrix matrix = new PixelMatrix(6);
public EditorPanel() {
setup();
}
private void setup() {
fileMenu.add(newItem);
fileMenu.add(openItem);
fileMenu.add(saveItem);
sizeButtonGroup.add(size6x6Item);
sizeSubMenu.add(size6x6Item);
sizeButtonGroup.add(size8x8Item);
sizeSubMenu.add(size8x8Item);
settingsMenu.add(sizeSubMenu);
menuBar.add(fileMenu);
menuBar.add(settingsMenu);
this.setLayout(layout);
this.add(menuBar, BorderLayout.NORTH);
this.setPreferredSize(new Dimension(600, 600));
this.add(matrix, BorderLayout.CENTER);
}
}
这就是我得到的。我不明白我做错了什么。 Result
【问题讨论】: