Scusa la domanda iniziale: ma JOptionPane non ti bastava? (cioè mettere un pannello come "message" del JOptionPane).
Di per sé, concettualmente, non fa una piega ma .... c'è un "piccolo" dettaglio che va considerato in questi casi: chi invoca getCentralPane? Lo invoca il costruttore della classe base astratta? Se così bisogna stare mooooolto attenti! Detto in generale: un costruttore non dovrebbe mai invocare un metodo che può essere ridefinito in una sotto-classe. E se proprio è necessario farlo, chi scrive le sotto-classi (e in particolare quel metodo ridefinito) deve essere ben a conoscenza di questo aspetto e scrivere la sottoclasse in modo da non causare problemi.
Se ti basta che la dialog sia alla dimensione minima/giusta cioè i componenti siano alla loro dimensione "preferita", basta fare un pack() sulla dialog.