L'uso di GridLayout è corretto (anche se specifichi 3 colonne ma poi inserisci 4 componenti, ma non è quello il punto).
frame è un java.awt.Frame? Se sì, gli hai cambiato (o tolto) il layout manager? O c'è quello di default (BorderLayout)?
Se il frame ha un BorderLayout, allora la riga
panel3.setBounds(150,401,199,199);
NON serve, perché facendo frame.add(panel3); metti panel3 nella parte CENTER, che occupa tutto lo spazio disponibile, quindi la dimensione di panel3 dipende solo dal frame, non dal panel3.