La respuesta corta es: esto es complicado.
La respuesta es un poco más largo: utilizar setSize()
si el padre de su componente tiene ningún controlador de distribución, y setPreferredSize()
y su relacionada setMinimumSize
y setMaximumSize
si lo hace.
setSize()
probablemente no hará nada si el padre del componente está utilizando un administrador de diseño; los lugares que normalmente tendrán un efecto serían en los componentes de nivel superior (JFrames
y JWindows
) y cosas que están dentro de scrolled panes
. También debe llamar al setSize()
si tiene componentes dentro de un elemento primario sin un administrador de diseño.
Como regla general, setPreferredSize()
debe hacer lo "correcto" si tiene un administrador de diseño; la mayoría de los administradores de diseño trabajan obteniendo los tamaños preferidos (así como mínimo y máximo) de sus componentes, y luego usando setSize()
y setLocation()
para posicionar esos componentes de acuerdo con las reglas del diseño. Entonces (como un ejemplo) un BorderLayout
intentará hacer que los límites de su región "norte" sean iguales al preferred size
de su componente norte - pueden terminar siendo más grandes o más pequeños que eso, dependiendo del tamaño del jframe
, el tamaño de los otros componentes en el diseño, y así sucesivamente.
Pensé que un componente estaba usando un administrador de diseño por defecto (BorderLayout?), Así que si no configuro explícitamente un administrador de diseño ¿significa eso que debería usar setSize() en lugar de setPreferredSize()? –
Creo que los JPanels usan BorderLayout de manera predeterminada, pero JComponent no tiene un diseño predeterminado. La mayoría de las veces, es mejor configurar un administrador de diseño si va a agregar algo en lugar de usar setSize(). – Sbodd
Mi recomendación es usar siempre un administrador de diseño. SetSize() debería considerarse como algo que llama el administrador de diseño, no algo que usted llama. –