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

Java 为什么Gridbag布局没有显示其上的完整组件,java,swing,jlabel,gridbaglayout,border-layout,Java,Swing,Jlabel,Gridbaglayout,Border Layout,我有一个JLabel的2D数组,希望将它们像表格一样放置在面板中,使用网格包布局。我将面板放入另一个具有边框布局的面板中 但是我没有得到完整的Jlabel。 谢谢 setLayout(新的GridBagLayout()); 此.setPreferredSize(新维度(550550)); GridBagConstraints gbc=新的GridBagConstraints(); 对于(int i=0;i

我有一个JLabel的2D数组,希望将它们像表格一样放置在面板中,使用网格包布局。我将面板放入另一个具有边框布局的面板中 但是我没有得到完整的Jlabel。 谢谢

setLayout(新的GridBagLayout());
此.setPreferredSize(新维度(550550));
GridBagConstraints gbc=新的GridBagConstraints();
对于(int i=0;i<10;i++)
对于(int j=0;j<10;j++){
gbc.gridy=j;
gbc.gridx=i;
cells[i][j]=新单元(emptyCell);//Jlabel的子类
单元格[i][j].setPreferredSize(新维度(50,50));
添加(单元格[i][j],gbc);
}
我得到了什么

真正的细胞是什么

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

  • 每个组件都应该负责确定自己的大小(即重写
    getpreferredSize()
    方法以返回大小
  • 对于配电盘,布局管理器将根据布局管理器的规则和添加到配电盘的组件确定首选尺寸

  • 这可能不是一个完整的答案,但您应该将.fill设置为.and.weightx和.weighty设置为1.0。事实上,单元格往往会崩溃

    当我使用Swing时——不是经常使用——我更喜欢GridBagLayout。但是,您必须熟悉它,才能让它做您想做的事情。

    发布一篇适当的文章,说明问题所在。
      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);
                }
    
    this.setPreferredSize(new Dimension(550, 550));