Enrichetto ha scritto:
Come potrei mantenere una griglia di celle (di cui posso modificare il colore) ma a full-screen? Cambiando Layout perdo le proprietà della griglia quindi è un bel problema!
Allora, se vuoi rendere l'applicazione full-screen, puoi utilizzare questa riga di codice (non metterlo dopo il setVisible (), in genere quello deve essere l'ultimo metodo applicato al frame nella creazione) :
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
Questo in realtà ti mostra ancora la cornice del frame, e a me non copre la barra degli strumenti. Puoi allargarlo ulteriormente se fai :
frame.setUndecorated(true);
Questo ti toglie la cornice e a me occupa interamente lo schermo, cosa che onestamente trovo molto irritante dato che devo chiudere l'applicazione con alt-tab e poi da console o con il tasto destro sull'icona in basso ...
Ma, se vuoi mantenere il GridLayout, cosa più che sensata (sempre che non voglia essere tu a disegnare il pannello, cosa che io tra l'altro
ti suggerirei di provare, almeno per farti un'idea), non puoi pretendere che la griglia occupi tutto lo spazio del frame e contemporaneamente lasciare che sia ridimensionabile.
Su questo non si scappa, se si allarga il frame a una dimensione non multipla della lunghezza delle celle, apparirà sempre un bordo, per forza.
Poi tu puoi scegliere come gestire questo bordo, ad esempio distribuirlo uniformemente tra destra-sinistra e alto-basso (che tra l'altro mi pare sia ciò che accada in automatico se fai solo il setExtendedState come scritto sopra).
Se non vuoi assolutamente che appaia un bordo, e non sei tanto fortunato da non averne alcuno se la griglia si adatta perfettamente al tuo schermo massimizzato (ma sarebbe comunque una falsa soluzione), allora devi risolvere in altro modo.
La soluzione migliore e più semplice, secondo me, è impedire che la griglia possa essere allargata a piacimento (settando setResizable (false) sul frame).
Questo non vuol dire per forza limitarsi ad avere una singola dimensione per il frame, perché puoi comunque lasciare all'utente la possibilità di dimensionare la finestra in altro modo.
Ad esempio una soluzione carina sarebbe avere una JMenuBar in alto (quelle barre che trovi nei programmi che di solito hanno le voci File, Modifica, Cerca, Configurazione, ecc.) in cui metti una voce Finestra, facendo un menù a cascata con le possibili dimensioni della finestra (es. 800x600, 400x300, etc.) oppure con le dimensioni della singola cella.
In questo modo avresti una finestra con sempre e solo la griglia (ovviamente devi impostare dimensioni "furbe", senza bordi) e senza componenti aggiuntivi, solo una barra degli strumenti in alto (che comunque potrebbe farti molto comodo per fornire in seguito altre opzioni all'utente).
Un'altra soluzione è cambiare LayoutManager, e sfruttarne uno che permetta a una o più celle della griglia di prendersi la "dimensione in eccesso".
Io non seguirei questa via, non so neanche se sia facile ottenere questo risultato, forse con il GridBagLayout se dividi la percentuale di lunghezza tra le celle (io non uso questo layout perché è molto artificioso, preferisco combinare i layout più semplici).
L'ultima soluzione che mi viene in mente ci riporta al disegno da parte tua del pannello.
Qui hai la libertà di fare ciò che vuoi e i calcoli richiesti per distribuire la dimensione in più, in questo caso, non dovrebbero essere affatto complessi.
Poi non ti so dire ora se il refresh del pannello (a seguito dell'allargamento della finestra) risulterebbe o no gradevole, per questo bisognerebbe provare.
Dicci tu cosa pensi di fare