Я думаю, что все, что вам нужно сделать, это ввести класс, расширяющий JPanel, и реализовать его метод paintComponent. Затем добавьте новый экземпляр этого класса в каждый раздел сетки. (Я думаю, что если вы создадите его один раз, а затем добавите одну и ту же ссылку несколько раз, у вас могут возникнуть проблемы)
public class Smiley extends JPanel {
paintComponent(Graphics g) {
//do stuff here
}
}
Это работает, потому что, когда контейнер (например, полученный вами contentPane) окрашивается, он также вызывает свой детский метод paintComponent. Таким образом, вы сможете добавить этот пользовательский JPanel в сетку, как вы писали выше, и все операции рисования, происходящие в paintComponent, будут происходить!
Также вам, вероятно, следует добавить главную панель в окно, иначе она не будет отображаться.