Sbagli diverse cose: per esempio il GridLayout lo allochi e basta ma non lo associ a nessun Container, oppure usi setContentPane che non è il massimo della vita. ti mostro come lo farei io(l'ho provato, funziona ma è un po bruttino poi te lo devi aggiustare te, magari parametrizzando nel costruttore di Mattone il colore).


codice:
File Mattone.java
public class Mattone extends javax.swing.JPanel{
	public Mattone(){
		super();
		this.setBackground(java.awt.Color.blue);
	}
}
codice:
File Main.java
public class Main extends javax.swing.JFrame{
	public Main(){
		super();
		this.setSize(500,500);
		this.setLocation(200,200);
		this.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
		java.awt.Container contentPane = this.getContentPane();
		javax.swing.JPanel mainPanel = new javax.swing.JPanel(new java.awt.GridLayout(7,6,2,2));

		for (int i=0;i<3;i++){
			for (int j=0;j<6;j++){
		  		mainPanel.add(new Mattone());
			}
		} //inserisco i mattoni
		for (int i=3;i<7;i++){
			for (int j=0;j<6;j++){
				mainPanel.add(new javax.swing.JPanel());
			}
		} //inserisco dei pannelli vuoti per riempire tutta la griglia.

		contentPane.add(mainPanel); //inserisco il pannello con la griglia di mattoni nel content pane
		this.setVisible(true);
	}
	public static void main(String args[]){
		new Main();
	}
}
Ti consiglio cmq di rifarti SEMPRE sulla documentazione java che è veramente fatta bene e ci trovi qualsiasi tipo di informazione!
http://java.sun.com/javase/6/docs/

Ciao.