Una grande differenza è come il valore può cambiare nel tempo, e quindi quello che si sceglie dovrebbe dipendere da ciò che si vuole fare con il codice.
Se chiami semplicemente setPreferredSize(new Dimension(500, 500));
nel codice, farà come ti aspetti - imposta la dimensione preferita su 500x500. Tuttavia, altri codici nella tua applicazione possono potenzialmente sovrascrivere questo valore con uno nuovo - tutto può chiamare setPreferredSize()
e l'ultima chiamata a questo metodo sarà il risultato finale.
Tuttavia, se si esegue l'override del metodo di getPreferredSize()
nel codice, lo farà sempre ritorno 500x500. Non importa se qualcuno del tuo codice chiama il metodo setPreferredSize()
, perché vengono effettivamente ignorati. Se si esegue l'override anche su getMinimumSize()
e getMaximumSize()
, è possibile forzare una dimensione fissa su un componente che non dovrebbe cambiare indipendentemente dalle dimensioni della finestra e degli altri componenti.
Tuttavia, come menzionato da @Andrew Thompson nei commenti, questo non è garantito in quanto alcuni gestori di layout possono scegliere di ignorarli, soprattutto se si sta scrivendo il proprio gestore di layout e aggiungendo un componente personalizzato ad alcuni genitori i contenitori ignoreranno anche questi metodi, a seconda di dove/come viene utilizzato il componente. Indipendentemente da ciò, è ancora più rigido di chiamare setPreferredSize()
che può essere facilmente chiamato da un altro codice e completamente sovrascritto.
Ho anche l'override del metodo di getPreferredSize()
(più getMinimumSize()
e getMaximumSize()
) per uno dei miei componenti personalizzati, come ad esempio un selettore di colori che ha bisogno di avere dimensioni specifiche per il componente da verniciare correttamente. Senza sovrascrivere questi metodi, i gestori di layout Swing non capiscono in che modo il componente personalizzato può essere posizionato e dimensionato in modo appropriato per le dimensioni di JFrame
o JPanel
.
[alcune regole] (http://stackoverflow.com/questions/7229226/should-i-avoid-the-use-of-setpreferredmaximumminimumsize-methods-in-java-swi) – mKorbel
Grazie per il collegamento. Anche se è un po 'strano che in un articolo menzionato nella risposta in alto si dice "non usare mai questo metodo [setPreferredSize] !!!" perché non ho mai avuto problemi con esso. Ma poi di nuovo non ho mai scritto UI davvero grandi/complesse. – IchBinKeinBaum
questo riguarda la programmazione di alto livello :-), ma sgridare sii consigli su come evitare errori, nessuno parla lì che usare LayoutManager è facile, richiede a) imparare e provare, b) fare alcune domande – mKorbel