tetramix ha scritto:
BorderLayout, BoxLayout, CardLayout, FlowLayout, GridBagLayout, GridLayout, GroupLayout, SpringLayout,
ma nessuno parla di quale sia la più flessibile o il più usato
BorderLayout, BoxLayout, CardLayout, FlowLayout, GridBagLayout, GridLayout sono i layout manager più semplici e "basilari" (BoxLayout è nel package javax.swing).
GroupLayout (da Java 6) e SpringLayout (da Java 1.4), presenti in javax.swing, sono tra i layout manager più complicati, perché con un solo layout manager è possibile effettuare il layout di tutti i componenti in una finestra/dialog potendo utilizzare vincoli anche molto complessi. Ad esempio in SpringLayout si possono applicare vincoli che mettono in relazione i bordi dei componenti.
GroupLayout e SpringLayout sono generalmente/tipicamente utilizzati dagli editor "visuali" delle interfacce grafiche negli IDE. Il codice generato dagli IDE però è spesso prolisso, fumoso e contorto.
Giusto per darti una idea, vedi questo codice che ho trovato con una ricerca fatta al volo:
https://netbeans.org/projects/samples/sources/samples-source-code/content/samples/java/DVDStoreAdmin-Ant/src/sakila/ui/DVDStoreAdmin.java
Dalla riga 89 inizia la gestione con il GroupLayout e come puoi vedere è estremamente complessa, contorta e solo a guardare il codice è difficilissimo dedurre come si presenta la interfaccia utente, cioè come sono disposti i componenti.
Le interfacce grafiche sarebbe meglio realizzarle con codice scritto
a mano e in tal caso è assolutamente
sconsigliabile l'uso di GroupLayout/SpringLayout.
Io personalmente non li ho mai usati direttamente, anzi, già a solo a guardare il codice come quello linkato mi passa la voglia di leggerlo ....
Rimangono quindi i layout manager "basilari" e ti posso garantire che almeno il 95% delle interfacce grafiche si può realizzare con questi. Ovviamente non è pensabile realizzare una interfaccia grafica complessa e sofisticata con solo es. BorderLayout o FlowLayout ... e probabilmente nemmeno con solo GridBagLayout.
La principale "abilità" in Swing sta nel saper "inscatolare" componenti dentro contenitori, dentro eventuali altri contenitori, ecc... magari sfruttando più layout manager differenti.
E in tutto questo può anche essere di aiuto applicare i principi della OOP, separando le parti della interfaccia in classi distinte e/o sfruttando la ereditarietà se si intravedono concetti riutilizzabili o specializzabili, ecc...
Riguardo tutti questi aspetti di "design", anche a livello OOP, un editor "visuale" non solo non ti aiuta in questo ma probabilmente ti mette pure i classici bastoni tra le ruote, come si dice. E per quanto ne so io, è solo un motivo in più per realizzare tutto il codice per la interfaccia grafica ...
a mano!