解决:
在尝试制作SSCCE之后,刚刚发现了问题所在。
它与我的单元类有关,我没有意识到我从JComponent类重写了getX()和getY()。
重命名这些访问器后,它们都按预期工作
========================================
我有一个JPanel,GridLayout设置为3行x 3列。
我正在尝试将JPanel添加到gridlayout中的每个单元格以填满所有9个单元格。 这些JPanel中的每一个都有一个覆盖的paintChildren方法,它将从JPanel的左上角开始绘制某种矩形 - 最终结果将是每个单元格从单元格的左上角开始有一个矩形。
将所有JPanel添加到gridlayout后,它们都出现在左上角相互重叠(我已经确认它们是重叠的),而不是在3x3网格中布局。
如何将它们安排在3x3网格中?
(简体)代码:
public class Panel extends JPanel {
public Panel(int x, int y) {
layout = new GridLayout(x, y, 2, 2);
setLayout(layout);
populateGrid();
}
public void populateGrid() {
removeAll();
for (int i = 0; i < 9; i++)
add(new Cell(50,50));
}
}
public class Cell extends JPanel {
public Cell(int x, int y) {
// x/y values used to define rectangle
setBorder(BorderFactory.createLineBorder(new Color(0,0,0)));
setBackground(Color.WHITE);
}
public void paintChildren(Graphics g) {
g.setColor(Color.BLUE);
g.fillRect(0, 0, x, y);
}
}
答案 0 :(得分:0)
确保导入正确的Panel
。 (而不是java.awt.Panel
类。)或者,更好的是,将您的班级重命名为GridPanel
或类似的东西以避免混淆/冲突。
您可能不想覆盖paintChildren
。在这种情况下,覆盖paintComponent
听起来更好。
您可能需要为Cell
课程设置最小/首选/最大尺寸。
如果没有实例化并使用Panel
类的实际代码,很难进行更多观察。