Swing: el tamaño de los componentes y los Layout

written by uve 23 April 2010

Uno de los problemas con los que me he encontrado es que en algunas ocasiones, cuando estaba desarrollando en un JFrame, me resultó imposible hacer un botón del tamaño que deseaba. Por más que utilizaba los métodos setSize() y/o setPreferredSize(), aquello hacía caso omiso. Tras muchas vueltas por fin encontré la respuesta.

Resulta que el truco está en los layouts. Si has utilizado un BoxLayout o un GridLayout te habrás encontrado con el problema. Resulta que algunos layouts ignoran el método getPreferredSize() y establecen el tamaño de los elementos como consideran oportuno.

Básicamente, el layout establece el tamaño del componente a través del método setSize(). Para ello, algunos de ellos obtienen el tamaño a través de getPreferredSize(), como BorderLayout y FlowLayout, y otros simplemente lo ignoran.

La solución es bien simple: si necesitas componentes de tamaño específico utiliza layouts que lo permitan o prueba introducir el componente en un panel que a su vez introducirás en el panel donde quieres que se muestre el componente.

Tags

La teoría es cuando crees saber algo, pero no funciona.
La práctica es cuando algo funciona, pero no sabes por qué.
Los programadores combinan la teoría y la práctica:
Nada funciona y no saben por qué.