Suponiendo que haya hueco de sobra como para hacer que uno crezca y los otros se reduzcan y siga cabiendo todo en el mismo tamaño de ventana,
usa un GridBagLayout para el principal en vez de un GridLayout. El GridLayout hace que los tres paneles tengan el mismo tamaño siempre, por lo que si uno crece, el otro también.
Después de añadir los nuevos componentes, llama al método updateUI() del panel que has cambiado, para obligar a repintar el panel con sus nuevos componentes.
Se bueno.