Quote Originariamente inviata da Pierock Visualizza il messaggio
a dire la verità non avevo pensato ad un JOptionPane, anche perchè in effetti non avevo mai provato ad inserire un pannello come message....
comunque sia, l'idea della classe astratta nasceva anche in previsione di poterla modificare o renderla più complessa in futuro....
Ma valuterò di sicuro la tua alternativa.
JOptionPane va bene per cose tutto sommato semplici. Se intendi espandere la tua dialog in futuro, es. aggiungere un menù o ad esempio gestire una logica per cui ad esempio il pulsante Ok si abilita solo sotto certe condizioni, allora la creazione della dialog da zero è sì più complessa ma alla lunga ripaga perché hai più controllo.

Quote Originariamente inviata da Pierock Visualizza il messaggio
Beh, a dire il vero non è invocato "direttamente" dal costruttore...
Quello che dicevo io non cambia se la invocazione è diretta o indiretta. Un costruttore non dovrebbe causare (in)direttamente la invocazione di un metodo sovrascritto in una sotto-classe di quella classe.

codice:
public class Prova {
    public static void main(String[] args) {
        ClasseBase b = new ClasseDerivata();
    }
}

abstract class ClasseBase {
    public ClasseBase() {
        test();
    }
    
    protected abstract void test();
}

class ClasseDerivata extends ClasseBase {
    private String nome = "Paperino";
    
    protected void test() {
        System.out.println("nome = " + nome);
    }
}
Prova a dirmi cosa fa questo codice (che a prima vista sembra assolutamente banale e innocuo, specialmente ClasseDerivata) ... e perché ....

Quote Originariamente inviata da Pierock Visualizza il messaggio
... per eliminare la chiamata a getCenterPane dal costruttore, ho fatto questa piccola modifica:
Ma così il init() della sottoclasse ha troppa "responsabilità", deve invocare super.init() (se te lo dimentichi, nessun errore di compilazione ma poi non ti funziona) e comunque agisce su caratteristiche della dialog che invece non dovrebbe "sapere".