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

GridLayout単一の列で単純にを使用できます。

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グリッドを作成しています。つまり、それぞれ2列の3行です。add()を最初に呼び出すと、コンポーネントが行1、列1に配置され、2番目の呼び出しでコンポーネントが行1、列2に配置されます。したがって、これらは互いに隣接しています。GridLayoutを使用すると、これをあまり制御できません。アイテムを次々に並べたい場合は、3x1グリッドを試すことができます。または、別の順序でコンポーネントを追加してみることができます。または、より詳細に制御できるGridBagLayoutなどの別のレイアウトマネージャーを試すこともできます。

于 2012-12-15T16:01:53.367 に答える