GridBagLayout не может получить правильное расположение

Я новичок в GridBagLayout, но я попытался использовать стандартное соглашение, которое я мог найти, которое заключалось в том, чтобы нарисовать мою идею на листе сетки, а затем попытаться перевести значения сетки в gridbag ...

моя цель - сделать макет как вы видите ниже:

в настоящее время это выглядит так:

любая идея'почему?

точные размеры ям, если вы думаете о сетке с верхним левым углом 0,0

красный на панели в картинке цели: начало в столбце 0, 10 столбцов, с высотой 1 строкидля черной панели: начало в столбце 0, строка 1, интервал 10 столбцов, высота 20 строкдля синей панели: начало в столбце 0, строка 21, интервал 10 столбцов, с высотой 1для зеленого столбца: начало в столбце 10, строка 0, интервал 16 столбцов, с высотой 7для фиолетового столбца: начало в столбце 10, строка 7, интервал 16 столбцов, с высотой 16

вот мой исходный код:

GBC - вспомогательный класс, расширяющий GridBagConstraints, используемый конструктор

GBC (int начальнаяX, внутренняя начальная Y, внутренняя ширина, внутренняя высота)

 /*
 * 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));
    }
}

любая помощь будет оценена (но, пожалуйста, объясните вашу логику)

Ответы на вопрос(1)

Ваш ответ на вопрос