我正在尝试在JLabel下设置JTextField

时间:2012-12-15 15:43:51

标签: java swing layout jlabel jtextfield

我正在尝试将文字字段放在JLabel下。目前,文本字段显示在同一行上。它应该低于中心。我需要帮助。

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

2 个答案:

答案 0 :(得分:4)

您只需使用一列GridLayout

setLayout(new GridLayout(0, 1));

请注意,GridLayout会忽略JTextFields的首选大小,因此使用构造函数JTextField(int columnSize)将无效,因此默认构造函数将执行此操作。

此外,我会删除内部间距,并为JFrame添加边框:

(JComponent)getContentPane()).setBorder(   
      BorderFactory.createEmptyBorder(10, 10, 10, 10) );  

这将产生一个看起来像

的框架

Centered JTextFields

答案 1 :(得分:1)

您正在创建一个3x2网格。也就是说,每行3列,每行2列。第一次调用add()会将组件放在第1行第1列,第二次调用将把第1行第2列放在第2行第2列中。因此它们彼此相邻。使用GridLayout,您无法对此进行太多控制。如果你想要的项目是下一个项目,你可以尝试3x1网格。或者您可以尝试以不同的顺序添加组件。或者您可以尝试使用不同的布局管理器,例如GridBagLayout,您可以在其中进行更多控制。