Java GridLayout正在左上角布置我的所有JPanel

时间:2011-10-13 11:01:08

标签: java swing user-interface awt grid-layout

解决:

在尝试制作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);
}
}

1 个答案:

答案 0 :(得分:0)

  • 确保导入正确的Panel。 (而不是java.awt.Panel类。)或者,更好的是,将您的班级重命名为GridPanel或类似的东西以避免混淆/冲突。

  • 您可能不想覆盖paintChildren。在这种情况下,覆盖paintComponent听起来更好。

  • 您可能需要为Cell课程设置最小/首选/最大尺寸。

如果没有实例化并使用Panel类的实际代码,很难进行更多观察。