java swing layout jtextfield layout-manager

jtextfield java



¿Cómo puedo controlar el ancho de JTextFields en Java Swing? (4)

Prueba esto:

textfield.setPreferredSize(new Dimension(int width, int height));

Estoy tratando de tener varios JTextFields en una sola fila, pero no quiero que tengan el mismo ancho. ¿Cómo puedo controlar el ancho y hacer que algunos de ellos sean más anchos que otros? Quiero que juntos ocupen el 100% del ancho total, por lo que sería bueno si pudiera usar algún tipo de peso.

He intentado con .setColumns() pero no tiene sentido.

Aquí hay un ejemplo, donde estoy usando tres filas con tres cadenas que deberían aparecer como en las columnas:

import java.awt.GridLayout; import javax.swing.BoxLayout; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; public class RowTest extends JPanel { class Row extends JComponent { public Row(String str1, String str2, String str3) { this.setLayout(new BoxLayout(this, BoxLayout.X_AXIS)); JTextField fld1 = new JTextField(str1); JTextField fld2 = new JTextField(str2); JTextField fld3 = new JTextField(str3); fld1.setColumns(5); // makes no sense this.add(fld1); this.add(fld2); this.add(fld3); } } public RowTest() { this.setLayout(new GridLayout(5,0)); this.add(new Row("Short", "A long text that takes up more space", "Short again")); this.add(new Row("Longer but short", "Another long string", "Short")); this.add(new Row("Hello", "The long field again", "Some info")); } public static void main(String[] args) { new JFrame() {{ this.getContentPane().add(new RowTest()); this.pack(); this.setVisible(true); }}; } }


Todos los componentes Swing tienen un tamaño preferido. El tamaño preferido de un componente de texto se basa en el texto del componente. Por lo general, el componente está pintado en su tamaño preferido.

Así que no veo el problema con su fragmento de código. Cada campo de texto debe tener un tamaño preferido diferente. Además, a medida que se cambia el tamaño del marco, se ajustará el ancho, ya que BoxLayout intentará redimensionar cada componente hasta su tamaño máximo / mínimo.

Si necesita más ayuda para publicar su SSCCE que realmente demuestra el problema de tamaño que está experimentando.

Editar:

En función del último requisito, puede utilizar el diseño relativo .


// 1. create JTextField yourTextField = new JTextField(); // 2. store default height int defaultHeight = yourTextField.getSize().getHeight(); // 3. set custom width and default height yourTextField.setSize(new Dimension(yourWidth, defaultHeight));


yourTextField = new JTextField("", 20);

si lo inicias así, establece que el campo de texto esté vacío y que tenga 20 columnas.