Lo vedo in modo diverso rispetto alla risposta accettata.
1) Devo evitare completamente l'uso di questi metodi?
Non evitare mai! Sono lì per esprimere i vincoli di dimensione dei tuoi componenti al gestore del layout. Puoi evitare di usarli se non stai utilizzando alcun gestore di layout e provare a gestire il layout visivo da solo.
Sfortunatamente, Swing non ha dimensioni predefinite ragionevoli. Tuttavia, invece di impostare le dimensioni di un componente, è meglio OOP discendere il proprio componente con impostazioni predefinite ragionevoli. (In tal caso, si chiama setXXX nella classe discendente). In alternativa, è possibile ignorare i metodi getXXX per lo stesso effetto.
2) I metodi sono stati definiti per un motivo. Quindi quando dovrei usarli? In quale contesto? Per quali scopi?
Sempre. Quando si crea un componente, impostarne le dimensioni minime / preferite / massime realistiche in base all'utilizzo di quel componente. Ad esempio, se si dispone di un JTextField per l'immissione di simboli di paesi come il Regno Unito, la sua dimensione preferita deve essere ampia per adattarsi a due caratteri (con il carattere corrente, ecc.), Ma probabilmente non ha senso lasciarlo crescere più grande. Dopo tutto, i simboli del paese sono due caratteri. Al contrario, se si dispone di un JTextField per l'immissione, ad esempio, di un nome cliente, può avere una dimensione preferita come la dimensione pixel per 20 caratteri, ma può aumentare di dimensioni se il layout viene ridimensionato, quindi impostare la dimensione massima su più. Allo stesso tempo, avere un JTextField largo 0px è inutile, quindi imposta una dimensione minima realistica (direi la dimensione in pixel di 2 caratteri).
3) Quali sono esattamente le conseguenze negative dell'utilizzo di questi metodi?
(Posso solo pensare di aggiungere portabilità tra sistemi con diversa risoluzione dello schermo).
Nessuna conseguenza negativa. Questi sono suggerimenti per il gestore del layout.
4) Non credo che nessun LayoutManager possa soddisfare esattamente tutte le esigenze di layout desiderate.
Devo davvero implementare un nuovo LayoutManager per ogni piccola variazione del mio layout?
No, sicuramente no. L'approccio abituale è quello di mettere in cascata diversi layout manager di base come layout orizzontale e verticale.
Ad esempio, il layout seguente:
<pre>
+--------------+--------+
| ###JTABLE### | [Add] |
| ...data... |[Remove]|
| ...data... | |
| ...data... | |
+--------------+--------+
</pre>
sta avendo due parti. Le parti sinistra e destra sono un layout orizzontale. La parte destra è un JPanel aggiunto al layout orizzontale, e questo JPanel ha un layout verticale che dispone i pulsanti in verticale.
Naturalmente, questo può diventare complicato con un layout di vita reale. Pertanto, i gestori di layout basati su griglia come MigLayout sono molto meglio se stai per sviluppare qualcosa di serio.
5) Se la risposta a 4 è "sì", ciò non porterà a una proliferazione di classi LayoutManager che diventeranno difficili da mantenere?
No, sicuramente non dovrai sviluppare gestori di layout, a meno che tu non abbia bisogno di qualcosa di molto speciale.
6) In una situazione in cui devo definire le proporzioni ...
tra i figli di un componente (ad esempio, child1 dovrebbe usare il 10% di spazio, child2 40%, child3 50%), è possibile farlo senza implementare un LayoutManager personalizzato?
Fondamentalmente, una volta che le dimensioni preferite sono impostate correttamente, potresti non voler fare nulla in percentuale. Semplicemente, poiché le percentuali sono inutili (ad esempio, è inutile avere un JTextField il 10% delle dimensioni della finestra - poiché è possibile ridurre la finestra in modo che JTextField diventi largo 0px o espandere la finestra in modo che JTextField si trovi su due schermi in un configurazione multi-display).
Ma a volte potresti usare le percentuali per controllare le dimensioni di blocchi più grandi della tua gui (pannelli, per esempio).
È possibile utilizzare JSplitPane in cui è possibile preimpostare il rapporto tra i due lati. In alternativa, è possibile utilizzare MigLayout che consente di impostare tali vincoli in percentuale, pixel e altre unità.
JEditorPane
con HTML che non suggerisce di per sé una larghezza. OTOH Non sono sicuro di aver perso qualcosa. Esaminerò attentamente le risposte sul thread, ma ero interessato a ricevere commenti, in particolare su quest'ultimo caso.