Ma il fatto è che hai comunque usato un tuo ImagePanel:Originariamente inviato da zanatas
In realtà il mio obiettivo non era quello di inserirci un'immagine nel headerSuPnl , ma di metterci altri oggetti in modo ordinato.
ImagePanel headerSuPnl = new ImagePanel("");
Passando "" è come se facessi appunto new ImageIcon("").getImage()
Questo fa sì che venga creato un oggetto Image di fatto "vuoto", di dimensione tra l'altro -1 x -1. E questa dimensione vai a forzarla sul ImagePanel come preferredSize/maximumSize/minimumSize. (e il setSize non serve perché questo pannello lo metti dentro l'altro ImagePanel che ha un layout manager).
Quindi questo tuo ImagePanel non ha dimensione, puoi aggiungerci dentro tutte le label che vuoi ma la sua dimensione è ridotta al minimo.
E infine: headerSuPnl l'hai messo dentro headerPnl che è in NORTH del BorderLayout. Bene: in NORTH e SOUTH viene "rispettato" solo il preferred height. E la altezza "preferita" di headerSuPnl è appunto -1 (che sarà trattato come 0 alla fin fine).