JPanel 内部的 JPanel 添加顶部填充

JPanel inside JPanel adds top padding

我想添加一个 CellPanel,它在 JPanel 中扩展 JPanel。我这样做是因为我有一些按钮可以从这些 JPanels 中删除内容并添加其他组件。问题是 JPanelFlowLayout 没有将我的 CellPanel 从左上角定位。我能做什么?

这是我遇到这个问题的代码:

    JFrame mazeFrame = new JFrame("Create and Play");
    mazeFrame.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);           
    mazeFrame.setSize(640, 480);
    mazeFrame.setResizable(false);
    mazeFrame.setLocationRelativeTo(null);   
    mazeFrame.setLayout(new GridLayout(rows,columns));//max(7,10)

    JPanel[] cellr = new JPanel[rows*columns];
    for(int i=0;i<rows*columns; i++){
        cellr[i] = new JPanel();
        cellr[i].setPreferredSize(new Dimension(mazeFrame.getWidth()/columns,mazeFrame.getHeight()/rows));
        mazeFrame.getContentPane().add(cellr[i]);
    }

   for(int i=0;i<rows*columns; i++){
        CellPanel cell = new CellPanel(wall.getImage());
        cell.setPreferredSize(new Dimension(mazeFrame.getWidth()/columns,mazeFrame.getHeight()/rows));
        cellr[i].add(cell);
    }

显示内容:

我做了一些研究并找到了解决方案。

    JPanel[] cellr = new JPanel[rows*columns];
    for(int i=0;i<rows*columns; i++){
        cellr[i] = new JPanel();
        cellr[i].setLayout(new GridBagLayout());
        mazeFrame.getContentPane().add(cellr[i]);
    }

   GridBagConstraints g = new GridBagConstraints();
   for(int i=0;i<rows*columns; i++){
        CellPanel cell = new CellPanel(wall.getImage());
        cell.setPreferredSize(new Dimension(mazeFrame.getWidth()/columns,mazeFrame.getHeight()/rows));
        g.fill = GridBagConstraints.BOTH;
        g.weightx = 1;
        g.weighty = 1;
        cellr[i].add(cell,g);
    }