Ehm... logicamente dovresti crearti un GridLayout con 3 righe e 1 colonna(sarebbe meglio il BoxLayout per evitare che i 3 pannelli poi occuperanno tutta la finestra in orizzontale), ed aggiungerci mano a mano un panel in ogni riga con un flowLayout.
Ma come sappiamo bene Java è una botta in fronte quando si tratta di sistemare le cose sullo schermo -.-".
Ho avuto anche io il tuo stesso problema ma alla fine ho optato per la scelta grid + flow.