Qual è la differenza principale tra setSize()
e setPreferredSize()
. A volte ho usato setSize()
, a volte setPreferredSize()
, a volte uno fa quello che voglio, a volte l'altro.
Che cosa chiamata dovrei usare per JFrame
s e JPanel
s?
Qual è la differenza principale tra setSize()
e setPreferredSize()
. A volte ho usato setSize()
, a volte setPreferredSize()
, a volte uno fa quello che voglio, a volte l'altro.
Che cosa chiamata dovrei usare per JFrame
s e JPanel
s?
Risposte:
L'utilizzo dipende dal fatto che il genitore del componente abbia o meno un gestore layout.
setSize()
- utilizzare quando non esiste un layout manager principale;setPreferredSize()
(anche relativo setMinimumSize
e setMaximumSize
): utilizzare quando esiste un gestore layout principale.Il setSize()
metodo probabilmente non farà nulla se il genitore del componente sta usando un gestore di layout; i posti questo genere hanno un effetto sarebbe su componenti di livello superiore ( JFrame
S e JWindow
S) e le cose che si trovano all'interno delle lastre di scorrere. Devi anche chiamare setSize()
se hai componenti all'interno di un genitore senza un gestore di layout.
Generalmente, setPreferredSize()
disporrà i componenti come previsto se è presente un gestore layout; la maggior parte dei gestori di layout lavora ottenendo le dimensioni preferite (oltre che minime e massime) dei loro componenti, quindi utilizzando setSize()
e setLocation()
per posizionare quei componenti in base alle regole del layout.
Ad esempio, a BorderLayout
cerca di rendere i confini della sua regione "nord" uguali alla dimensione preferita della sua componente nord --- possono finire per essere più grandi o più piccoli di quella, a seconda della dimensione del JFrame
, della dimensione degli altri componenti nel layout e così via.
setSize()
o setBounds()
può essere utilizzato quando non viene utilizzato alcun gestore di layout.
Tuttavia, se si utilizza un gestore di layout, è possibile fornire suggerimenti al gestore di layout utilizzando setXXXSize()
metodi come setPreferredSize()
ed setMinimumSize()
ecc.
E assicurati che il contenitore del componente utilizzi un gestore layout che rispetti la dimensione richiesta. Il FlowLayout
, GridBagLayout
e SpringLayout
manager utilizzano dimensione preferita del componente (gli ultimi due a seconda dei vincoli impostati), ma BorderLayout
e GridLayout
di solito don't.If si specificano nuovi suggerimenti per le dimensioni di un componente che è già visibile, è necessario invocare il metodo revalidate su per assicurarsi che la sua gerarchia di contenimento sia nuovamente strutturata. Quindi invoca il metodo repaint.
setSize
ridimensionerà il componente alla dimensione specificata.
setPreferredSize
imposta la dimensione preferita. Il componente potrebbe non essere effettivamente di queste dimensioni a seconda delle dimensioni del contenitore in cui si trova o se l'utente ha ridimensionato manualmente il componente.
IIRC ...
setSize
imposta la dimensione del componente.
setPreferredSize
imposta la dimensione preferita. Il Layoutmanager proverà a organizzare così tanto spazio per il tuo componente.
Dipende se stai usando o meno un gestore di layout ...