JFrame (e gli altri componenti top-level che discendono da Window) ha il pack(), che fa una cosa molto semplice: dimensiona la finestra in base al preferred size dei componenti. Quindi se il tuo panel ha (e dovrebbe) gestire appropriatamente il proprio preferred size, puoi fare quello che hai chiesto con il pack.