L'add l'hai fatto direttamente sul JFrame, questo di per sé non è sbagliato. Infatti la documentazione di JFrame dice:Originariamente inviato da iMet
codice:final JFrame Main = new JFrame("TEST"); Main.add(panel);
"As a conveniance add and its variants, remove and setLayout have been overridden to forward to the contentPane as necessary.".
Cioè un add sul JFrame internamente fa un add sul content pane. Questo "forward" è stato aggiunto solo da Java 5, perché in passato, prima di Java 5, non era così (EDIT: e il tuo add sarebbe stato inappropriato).
Quindi magari, se vuoi, abituati a prendere esplicitamente il content pane (io faccio in genere così appunto).
Per tornare al tuo caso, comunque, non hai cambiato/tolto layout manager nel content pane, quindi resta di serie il BorderLayout. Pertanto ogni volta che aggiungi/togli rimuovi componenti nel content pane (esplicitamente o tramite forward da add/remove sul JFrame), allora devi invocare validate(). Nessuno vieta di invocare validate() sul JFrame (la validazione parte solo più "a monte") ma se lo fai sul content pane è preferibile.

Rispondi quotando