Search code examples
javaswinglayoutjlabeljtextfield

I'm trying to set JTextField under JLabel


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);
    }
}

Solution

  • 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

    Centered JTextFields