为什么Gridbag布局没有显示完整的组件

时间:2017-06-26 13:31:35

标签: java swing jlabel gridbaglayout border-layout

我有Jlabels的2D数组,并希望在面板中使用网格包布局将它们像桌子一样。我把面板放到另一个边框布局的面板上 但我没有得到完整的Jlabel。 谢谢!

  setLayout(new GridBagLayout());
        this.setPreferredSize(new Dimension(550, 550));

        GridBagConstraints gbc = new GridBagConstraints();
        for (int i = 0; i < 10; i++)
            for (int j = 0; j < 10; j++) {
                gbc.gridy = j;
                gbc.gridx = i;
                cells[i][j] = new Cell(emptyCell);// subclass of Jlabel
                cells[i][j].setPreferredSize(new Dimension(50, 50));
                add(cells[i][j],gbc);
            }

我得到了什么 enter image description here

真正的细胞是什么

enter image description here

2 个答案:

答案 0 :(得分:1)

this.setPreferredSize(new Dimension(550, 550));

不要在组件上使用setPreferredSize()方法:

  1. 每个组件应负责确定自己的大小(即覆盖getpreferredSize()方法以返回大小。
  2. 对于面板,布局管理器将根据布局管理器的规则和添加到面板的组件确定首选大小。

答案 1 :(得分:0)

这可能不是一个完整的答案,但你应该将.fill设置为.BOTH,.weightx和.weighty设置为1.0。事实上,细胞往往会崩溃。

当我做Swing时 - 不常见 - 我更喜欢GridBagLayout。但是,你必须熟悉它才能让它做你想做的事。