GridBagLayout não pode obter o layout certo

Sou novo no GridBagLayout, mas tentei usar a convenção padrão que pude descobrir que era extrair minha ideia em um pedaço de grade e depois tentar traduzir os valores de grade em gridbag ...

meu objetivo é fazer o layout como você vê abaixo:

atualmente é assim:

alguma ideia do por que?

as dimensões exatas que estou procurando, se você pensar em uma grade com o canto superior esquerdo sendo 0,0 para

o vermelho no painel na figura do gol: comece na coluna 0, alcance 10 colunas, com altura 1 linhapara o painel preto: comece na coluna 0, linha 1, alcance 10 colunas, com altura de 20 linhaspara o painel azul: comece na coluna 0, linha 21, alcance 10 colunas, com altura 1para a coluna verde: comece na coluna 10, linha 0, alcance 16 colunas, com altura 7para a coluna púrpura: início na coluna 10, linha 7, extensão 16 colunas, altura 16

aqui está meu código fonte:

GBC é uma classe auxiliar que estende GridBagConstraints, o construtor usado é

GBC (int começandoX, int começandoY, int largura, int altura)

 /*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import java.awt.Rectangle;
import javax.swing.JApplet;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Demo extends JApplet
{

    JPanel panel1 = new JPanel();
    JPanel panel2 = new JPanel();
    JPanel panel3 = new JPanel();
    JPanel panel4 = new JPanel();
    JPanel panel5 = new JPanel();

    public void init()
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                initComponents();
            }
        });
    }

    public void initComponents()
    {
        //set the layout of the content pane to gridbag layout
        GridBagLayout gridBag = new GridBagLayout();
        getContentPane().setLayout(gridBag);

        Rectangle rect = getContentPane().getBounds();

        panel1.setBackground(Color.green);
        panel2.setBackground(Color.black);
        panel3.setBackground(Color.red);
        panel4.setBackground(Color.orange);
        panel5.setBackground(Color.yellow);

        add(panel4, new GBC(10, 0, 16, 7).setFill(GBC.BOTH).setWeight(1.0, 1.0));
        add(panel1, new GBC(0, 0, 10, 1).setFill(GBC.BOTH).setWeight(1.0, 1.0));
        add(panel3, new GBC(0, 21, 10, 1).setFill(GBC.BOTH).setWeight(1.0, 1.0));
        add(panel2, new GBC(0, 1, 10, 20).setFill(GBC.BOTH).setWeight(1.0, 1.0));
        add(panel5, new GBC(10, 7, 16, 16).setFill(GBC.BOTH).setWeight(1.0, 1.0));
    }
}

qualquer ajuda seria apreciada (mas explique sua lógica)

questionAnswers(1)

yourAnswerToTheQuestion