¿Cuál es la principal diferencia entre setSize()
y setPreferredSize()
. A veces usé setSize()
, a veces setPreferredSize()
, a veces uno hace lo que quiero, a veces el otro.
¿Qué llamada debo usar para JFrame
s y JPanel
s?
¿Cuál es la principal diferencia entre setSize()
y setPreferredSize()
. A veces usé setSize()
, a veces setPreferredSize()
, a veces uno hace lo que quiero, a veces el otro.
¿Qué llamada debo usar para JFrame
s y JPanel
s?
Respuestas:
El uso depende de si el padre del componente tiene un administrador de diseño o no.
setSize()
- utilizar cuando no existe un administrador de diseño principal;setPreferredSize()
(también está relacionado setMinimumSize
y setMaximumSize
): se usa cuando existe un administrador de diseño principal.El setSize()
método probablemente no hará nada si el padre del componente está usando un administrador de diseño; los lugares esto suele tener un efecto sería en los componentes de nivel superior ( JFrame
S y JWindow
S) y las cosas que están dentro de los paneles enrollados. También debe llamar setSize()
si tiene componentes dentro de un padre sin un administrador de diseño.
Generalmente, setPreferredSize()
colocará los componentes como se espera si hay un administrador de diseño presente; la mayoría de los administradores de diseño trabajan obteniendo los tamaños preferidos (así como mínimos y máximos) de sus componentes, luego usan setSize()
y setLocation()
colocan esos componentes de acuerdo con las reglas del diseño.
Por ejemplo, a BorderLayout
intenta hacer que los límites de su región "norte" sean iguales al tamaño preferido de su componente norte; pueden terminar siendo más grandes o más pequeños que eso, dependiendo del tamaño de JFrame
, el tamaño de los otros componentes en el diseño, etc.
setSize()
o setBounds()
se puede utilizar cuando no se utiliza ningún administrador de diseño.
Sin embargo, si está utilizando un controlador de disposición puede proporcionar pistas para el controlador de distribución utilizando los setXXXSize()
métodos como setPreferredSize()
y setMinimumSize()
etc.
Y asegúrese de que el contenedor del componente utilice un administrador de diseño que respete el tamaño solicitado. El FlowLayout
, GridBagLayout
y SpringLayout
los gerentes utilizan el tamaño preferido del componente (estos dos últimos en función de las limitaciones que establezca), pero BorderLayout
, y GridLayout
por lo general se especifican don't.If nuevas sugerencias de tamaño para un componente que ya es visible, es necesario invocar el método en revalidate para asegurarse de que su jerarquía de contención se vuelva a establecer. Luego invoque el método repintado.
setSize
cambiará el tamaño del componente al tamaño especificado.
setPreferredSize
establece el tamaño preferido. Es posible que el componente no tenga este tamaño dependiendo del tamaño del contenedor en el que se encuentra, o si el usuario redimensionó el componente manualmente.
IIRC ...
setSize
establece el tamaño del componente.
setPreferredSize
establece el tamaño preferido. El Layoutmanager intentará organizar esa cantidad de espacio para su componente.
Depende de si estás usando un administrador de diseño o no ...