I'm trying to put the text field under the JLabel
. Currently, the text field is displayed on the same line. It should be below and centered. I need assistance.
package Gui;
import javax.swing.*;
import java.awt.*;
import java.awt.GridLayout;
public class ShowGridLayout extends JFrame {
public ShowGridLayout() {
// Set GridLayout, 3 rows, 2 columns, and gaps 5 between
// components horizontally and vertically
setLayout(new GridLayout(3, 2, 5, 5));
// Add labels and text fields to the frame
JLabel firstname = new JLabel("First Name");
add(firstname);
JTextField fistnametextField = new JTextField(8);
add(fistnametextField);
JLabel mi = new JLabel("Mi");
add(mi);
JTextField miTextField = new JTextField(1);
add(miTextField);
JLabel lastname = new JLabel("Last Name");
add(lastname);
JTextField lastnameTextField = new JTextField(8);
add(lastnameTextField);
}
/**
* Main method
*/
public static void main(String[] args) {
ShowGridLayout frame = new ShowGridLayout();
frame.setTitle("ShowGridLayout");
frame.setSize(200, 125);
frame.setLocationRelativeTo(null); // Center the frame
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
You could simply use a GridLayout
with a single column:
setLayout(new GridLayout(0, 1));
Note that GridLayout
will ignore the preferred sizes of the JTextFields
so using the constructor JTextField(int columnSize)
will have no effect so the default constructor will do.
Also I would remove the internal spacing here and add a border to the JFrame
:
(JComponent)getContentPane()).setBorder(
BorderFactory.createEmptyBorder(10, 10, 10, 10) );
This would produce a frame that looks like