5

Java Swing を使用して、Eclipse で連絡先リスト アプリケーションをコーディングしています。列と行のみを含む単純なテーブル レイアウトを取得するにはどうすればよいですか? 行または列のラベルは必要ありません。

このようなもの:

first name: john
middle name: franklin
last name: doe

名前が編集可能なテキストボックスなどになる場所。

使用するのに最適なコンポーネントは何ですか?

テキストフィールドの下にもボタンがあります。現在、JFrame正しく実行されている があります。メニューオプションが正しいウィンドウが表示されます。しかし、私がこれをやろうとすると:

myFrame.setLayout(new GridLayout(6, 2)); 

エラーが発生します。2 列 5 行 (おそらく 6) のグリッド レイアウトが必要です。左の列にラベル、右の列にテキスト ボックスを配置したいと考えています。次に、下部の中央にある 2 つのボタン。

4

1 に答える 1

4

フィールドとコントロール (ボタン) を別々のパネルに分割することをお勧めします。これにより、それぞれに異なるレイアウト マネージャーを提供できます。

JPanel.を使用してベースから始めBorderLayoutます。

この上に、その位置に「フィールド」パネルを追加し、そのCENTER位置にコントロール (ボタン) を追加しますSOUTH

フィールドには を使用しますが、私GridBagLayoutはそのようにうるさいので、コントロール パネルにはおそらく を使用します(適切なマネージャーFlowLayoutにアクセスできない場合は;))ButtonLayout

これは、次のような結果になる可能性があることを意味します

ここに画像の説明を入力

コードサンプルで更新

public class FormPanel extends JPanel {

    private JTextField fldFirstName;
    private JTextField fldMiddleName;
    private JTextField fldLastName;
    private JTextField fldDateOfBirth;
    private JTextField fldEMail;
    private JButton okButton;
    private JButton cancelButton;

    public FormPanel() {

        setLayout(new BorderLayout());
        add(createFieldsPane());
        add(createButtonsPane(), BorderLayout.SOUTH);

    }

    public JPanel createButtonsPane() {

        JPanel panel = new JPanel(new FlowLayout());
        panel.add((okButton = createButton("Ok")));
        panel.add((cancelButton = createButton("Cancel")));

        return panel;

    }

    protected JButton createButton(String text) {

        return new JButton(text);

    }

    public JPanel createFieldsPane() {

        JPanel panel = new JPanel(new GridBagLayout());
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.insets = new Insets(2, 2, 2, 2);
        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.anchor = GridBagConstraints.WEST;

        panel.add(createLabel("First Name:"), gbc);
        gbc.gridy++;
        panel.add(createLabel("Middle Name:"), gbc);
        gbc.gridy++;
        panel.add(createLabel("Last Name:"), gbc);
        gbc.gridy++;
        panel.add(createLabel("Date of Birth:"), gbc);
        gbc.gridy++;
        panel.add(createLabel("EMail:"), gbc);

        gbc.gridy = 0;
        gbc.gridx++;
        gbc.weightx = 1;
        panel.add((fldFirstName = createField()), gbc);
        gbc.gridy++;
        panel.add((fldLastName = createField()), gbc);
        gbc.gridy++;
        panel.add((fldMiddleName = createField()), gbc);
        gbc.gridy++;
        panel.add((fldDateOfBirth = createField()), gbc);
        gbc.gridy++;
        panel.add((fldEMail = createField()), gbc);

        JPanel filler = new JPanel();
        filler.setOpaque(false);

        gbc.gridy++;
        gbc.weightx = 1;
        gbc.weighty = 1;
        panel.add(filler, gbc);

        return panel;

    }

    protected JLabel createLabel(String text) {

        return new JLabel(text);

    }

    protected JTextField createField() {

        JTextField field = new JTextField(12);
        return field;

    }

}
于 2012-09-04T00:11:38.233 に答える