JPanel viene aggiunto ad un form ma non viene visualizzato

di Anonimizzato14901 il
3 risposte
Ciao! Ho creato con NetBeans un JPanel che contiene una sfilza di componenti ma quando cerco di aggiungerlo in un qualsiasi frame o panel non riesco a visualizzarlo. Il nuovo Panel viene creato senza problemi o eccezioni, però quando faccio
add(nuovoPanel)
non si vede nulla.
Qualcuno può spiegarmi se c'è qualcosa che mi sono perso?
Grazie mille

3 Risposte

  • Facendo vari tentativi mi sono accorto che anche se provo ad aggiungere ad un JPanel esistente un nuovo JPanel il secondo non viene aggiunto..quindi la mia domanda diventa: è possibile aggiungere un nuovo JPanel su un JPanel preesistente?
  • Preferisco spiegare in generale.
    In AWT/Swing un componente lo si aggiunge dentro un "contenitore" (qualunque cosa che è/estende java.awt.Container). Il container può avere un layout manager oppure no.
    Se ha un layout manager allora, a seconda di quale è, potrebbe essere necessario specificare dei "constraint" che dicono al layout manager i criteri per disporre/dimensionare il componente.

    Se hai usato il GUI editor di NetBeans, sappi che è abbastanza noto per generare codice prolisso, fumoso e complesso (e aggiungo io: contorto) che tipicamente usa un org.jdesktop.layout.GroupLayout. E sappi che mettere mano a tale codice è molto un bagno di sangue.
    Se il tuo contenitore sta usando quel GroupLayout ci sono sicuramente dei constraint da specificare.

    Altro aspetto importante ma minore è se la aggiunta la fai prima o dopo che il contenitore è già visibile a video. Nel secondo caso il layout va anche rivalidato (se c'è appunto un layout manager).


    P.S. il consiglio che dò sempre è di imparare a scrivere a mano tutto il codice per la GUI, imparando bene l'uso dei layout manager basilari .... non certo quel GroupLayout. E sfruttando anche i concetti della OOP per separare e incapsulare parti distinte della GUI.
  • Grazie mille, ho notato la complessità del Layout Manager di NetBeans; io ho impostato un GridLayout e ho rivalidato, ora funziona grazie mille!
Devi accedere o registrarti per scrivere nel forum
3 risposte