Quote Originariamente inviata da andbin Visualizza il messaggio
Ok, ho visto la griglia, mi è chiaro il risultato aspettato. Tecnicamente parlando, ci sono almeno 3 soluzioni in Swing:

a) Disporre le 45x45 celle usando un layout manager, GridLayout è il candidato ideale. Ogni cella chiaramente dovrà contenere un componente, potrebbe essere un JLabel o un JPanel, cambia poco, l'importante che è sia "opaco" e si possa settarne quindi il background. O addirittura si potrebbe definire un componente custom. Quale componente usare comunque è meno importante del resto.
Bisogna anche considerare le dimensioni: GridLayout suddivide l'intero contenitore (il componente che ha il GridLayout) in NxM celle, quindi se fissi la dimensione del contenitore (es. perché dipende direttamente dalla dimensione del frame), sono le celle ad adattarsi, non il contrario. Altrimenti puoi fare in modo che sia il contenitore ad adattarsi ai componenti nelle celle, che devono avere un "preferred size".

b) Disporre le 45x45 celle senza un layout manager. Usi la tecnica del posizionamento "assoluto", ogni componente lo disponi dove vuoi e con la dimensione che vuoi (setLocation+setSize oppure setBounds). La scelta del componente da usare per le celle è uguale/similare a quanto detto in a).

c) Usi il custom painting, ovvero definisci un componente custom (estendendo JPanel o al limite JComponent) in cui disegni tutta la griglia tramite la API di Java 2D. Chiaramente va tutto gestito, painting corretto, metodi per settare lo stato delle celle, ecc..
Visto che è un griglia molto regolare e semplice, non è troppo difficile (ma richiede comunque buone conoscenze sul painting, Java 2D, ecc...)

A te la scelta.
L'ipotesi C credo sia per me la più difficile perché non ho alcuna esperienza sul Painting, posso però provare a documentarmi su Oracle.
L'ipotesi a) l'avevo presa in considerazione ma non posso avere una matrice sparsa, è tra i requisiti del progetto, quindi se avessi tutte e 2025 cellule avrei una serie di 0 e pochi 1 almeno in fase iniziale. Per evitare questa cosa uso l'HashMap.. Io vorrei estrarre solo quelli in mappa (che magari possono essere 3 in un dato momento). Esiste un modo, se ad esempio dispongo 2025 Label con il GridLayout, di modificare la i-esima Label? Dovrei fare per forza un array di Label oppure posso accedere a [3,9] sfruttando il grid?