0

我正在尝试将文本字段放在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);
    }
}
4

2 回答 2

4

您可以简单地将 aGridLayout与单列一起使用:

setLayout(new GridLayout(0, 1));

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

此外,我将删除此处的内部间距并在以下位置添加边框JFrame

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

这将产生一个看起来像

居中的 JTextFields

于 2012-12-15T16:01:23.543 回答
1

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

于 2012-12-15T16:01:53.367 回答