tutorial layouts fillers borderlayout java swing layout layout-manager

fillers - java swing layouts



¿Cómo evito que JTextFields en un Java Swing BoxLayout se expanda? (5)

Tengo un JPanel que se ve así:

JPanel panel = new JPanel(); panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); ... panel.add(jTextField1); panel.add(Box.createVerticalStrut(10)); panel.add(jButton1); panel.add(Box.createVerticalStrut(30)); panel.add(jTextField2); panel.add(Box.createVerticalStrut(10)); panel.add(jButton2); ... //etc.

Mi problema es que los JTextField vuelven enormes verticalmente. Quiero que solo sean lo suficientemente altos para una sola línea, ya que eso es todo lo que el usuario puede escribir en ellos. Los botones están bien (no se expanden verticalmente).

¿Hay alguna manera de evitar que se JTextField los JTextField s? Soy bastante nuevo para Swing, así que avíseme si estoy haciendo todo horriblemente mal.


En mi caso, necesito una combinación de todas las respuestas para que funcione correctamente. Si no uso pegamento, no está centrado verticalmente; si no restrinjo el tamaño máximo, se extiende verticalmente; si restrinjo tanto el ancho como la altura, es demasiado pequeño, solo lo suficientemente ancho como para contener el texto de inicialización.

textField = new JTextField("Hello, world!"); textField.setMaximumSize( new Dimension(Integer.MAX_VALUE, textField.getPreferredSize().height)); Box box = Box.createVerticalBox(); box.add(Box.createVerticalGlue()); box.add(textField); box.add(Box.createVerticalGlue());


Si desea que el ancho siga cambiando, simplemente manténgalo configurado en MAX INT. Asi que...

textField.setMaximumSize( new Dimension(Integer.MAX_VALUE, textField.getPreferredSize().height) );


establecer la altura máxima. o ponerlos en una región de desplazamiento


JPanel panel = new JPanel(); Box box = Box.createVerticalBox(); JTextField tf = new JTextField(8); box.add(tf); panel.add(box); frame.getContentPane().add(panel, BorderLayout.CENTER);


textField = new JTextField( ... ); textField.setMaximumSize( textField.getPreferredSize() );