Ok ma non confondere la struttura logica con quella fisica/visuale. Se vuoi gestire a livello logico un array "sparso", puoi farlo appunto con una mappa (ti consiglierei ad esempio di fare una classe apposita es. ArraySparso che incapsula questa logica). Ma questo non è detto che c'entri direttamente qualcosa con il modo di presentare visivamente quei dati!
Se usi GridLayout devi inserire componenti in tutte le celle, non puoi lasciare "buchi". Ricorda che nei "container" (qualunque cosa che è o estende java.awt.Container) i componenti contenuti sono in una banale lista e ci pensa il layout manager a disporli secondo le sue logiche. Ma per il l.m. quello è solo un elenco di componenti, infatti GridLayout lo puoi creare per NxM celle ma poi lui dispone i componenti come se fossero un flusso che va da sinistra-destra (o il contrario) e alto-basso. Ecco perché non puoi avere buchi.
GridLayout non fornisce alcunché per "vedere" a livello logico una griglia. Insomma, non ha un metodo del tipo "dammi il componente alla riga y, colonna x". Proprio per i motivi detti prima.
Questo però non vuol dire nulla (di grave). Vuol solo dire che devi tenerti tu un array bidimensionale dei componenti per poter fare quell'accesso diretto ad un componente alla cella x,y.
codice:public class FrameGioco extends JFrame { private JPanel contenitoreGriglia; private GridLayout gridLayout; private JLabel[][] matriceLabel; ....... }
Quindi mentre fai il doppio ciclo for per riempire matriceLabel, li aggiungi anche al contenitoreGriglia. Tutto qui. Non vedere/creare problemi dove in effetti non ce ne sono.![]()