Te damos la bienvenida a nuestra página web, ahora hallarás la solucíon a lo que estás buscando.
Solución:
Sí, tienes que cambiar el diseño. Eche un vistazo a SpringLayout y este ejemplo:
(fuente: sun.com)
String[] labels = "Name: ", "Fax: ", "Email: ", "Address: ";
int numPairs = labels.length;
//Create and populate the panel.
JPanel p = new JPanel(new SpringLayout());
for (int i = 0; i < numPairs; i++)
JLabel l = new JLabel(labels[i], JLabel.TRAILING);
p.add(l);
JTextField textField = new JTextField(10);
l.setLabelFor(textField);
p.add(textField);
//Lay out the panel.
SpringUtilities.makeCompactGrid(p,
numPairs, 2, //rows, cols
6, 6, //initX, initY
6, 6); //xPad, yPad
SpringLayout funciona bien para este formulario simple, pero hay bibliotecas de terceros que tienen más funciones. Es decir, diseño MiG.
Otra forma de crear un formulario usando GridBagLayout, produciendo el siguiente resultado:
Código:
JPanel addressPanel = new JPanel();
Border border = addressPanel.getBorder();
Border margin = new EmptyBorder(10, 10, 10, 10);
addressPanel.setBorder(new CompoundBorder(border, margin));
GridBagLayout panelGridBagLayout = new GridBagLayout();
panelGridBagLayout.columnWidths = new int[] 86, 86, 0 ;
panelGridBagLayout.rowHeights = new int[] 20, 20, 20, 20, 20, 0 ;
panelGridBagLayout.columnWeights = new double[] 0.0, 1.0, Double.MIN_VALUE ;
panelGridBagLayout.rowWeights = new double[] 0.0, 0.0, 0.0, 0.0, 0.0,
Double.MIN_VALUE ;
addressPanel.setLayout(panelGridBagLayout);
addLabelAndTextField("City:", 0, addressPanel);
addLabelAndTextField("Street:", 1, addressPanel);
addLabelAndTextField("State:", 2, addressPanel);
addLabelAndTextField("Phone:", 3, addressPanel);
addLabelAndTextField("Mail:", 4, addressPanel);
El método del ayudante addLabelAndTextField
:
private void addLabelAndTextField(String labelText, int yPos,
Container containingPanel)
JLabel label = new JLabel(labelText);
GridBagConstraints gridBagConstraintForLabel = new GridBagConstraints();
gridBagConstraintForLabel.fill = GridBagConstraints.BOTH;
gridBagConstraintForLabel.insets = new Insets(0, 0, 5, 5);
gridBagConstraintForLabel.gridx = 0;
gridBagConstraintForLabel.gridy = yPos;
containingPanel.add(label, gridBagConstraintForLabel);
JTextField textField = new JTextField();
GridBagConstraints gridBagConstraintForTextField = new GridBagConstraints();
gridBagConstraintForTextField.fill = GridBagConstraints.BOTH;
gridBagConstraintForTextField.insets = new Insets(0, 0, 5, 0);
gridBagConstraintForTextField.gridx = 1;
gridBagConstraintForTextField.gridy = yPos;
containingPanel.add(textField, gridBagConstraintForTextField);
textField.setColumns(10);
Actualmente está utilizando un GridLayout, que puede estar bien para su necesidad.
Sin embargo, debe inicializarlo con el número real de filas y columnas que necesitará. En tu caso:
new GridLayout(0, 2);
0 para filas significa que no hay límite, y tiene 2 columnas, una para las etiquetas y otra para el componente de entrada. Consulte el tutorial de Java para obtener más información sobre GridLayouts.
(fuente: sun.com)
Sin embargo, tenga en cuenta que GridLayout hará que todas las "celdas" tengan el mismo tamaño, lo que puede ser un problema para las etiquetas.
Sin embargo, Jonas tiene razón, un SpringLayout probablemente se adapte más a tus necesidades.
Aquí tienes las comentarios y valoraciones
Si piensas que te ha resultado de utilidad este artículo, agradeceríamos que lo compartas con más programadores de este modo contrubuyes a difundir nuestro contenido.