【问题标题】:Java GridLayout is laying out all my JPanels in the top left cornerJava GridLayout 在左上角布置了我所有的 JPanel
【发布时间】:2011-12-06 21:00:54
【问题描述】:

已解决:

在尝试制作 SSCCE 后才发现问题所在。

这与我的单元格类有关,我没有意识到我正在覆盖 JComponent 类中的 getX() 和 getY()。

重命名这些访问器后,一切都按预期工作

=========================================

我有一个 GridLayout 设置为 3 行 x 3 列的 JPanel。

我正在尝试将 JPanel 添加到网格布局中的每个单元格以填满所有 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);
}
}

【问题讨论】:

  • "(Simplified) Code:" 为了尽快获得更好的帮助,请发布SSCCE,而不是无法编译的代码sn-ps。
  • 看看these notes。它们带有示例,还涵盖了面板布局等。

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


【解决方案1】:
  • 确保导入正确的Panel。 (而不是 java.awt.Panel 类。)或者,最好将您的类重命名为 GridPanel 或类似名称以避免混淆/冲突。

  • 您可能不想覆盖paintChildren。在这种情况下,覆盖 paintComponent 听起来是一个更好的选择。

  • 您可能想要为Cell 类设置最小/首选/最大大小。

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

【讨论】:

  • 是的 - 我已将它们重命名为在这里发布,实际名称更有意义。我正在使用 new Panel(3, 3); 实例化面板,它被放置在边框布局的中心
猜你喜欢
  • 1970-01-01
  • 2016-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-12
  • 1970-01-01
  • 1970-01-01
  • 2021-10-02
相关资源
最近更新 更多