5

我正在使用 Java Swing 在 Eclipse 中编写联系人列表应用程序。如何获得仅包含列和行的简单表格布局?我不想要行或列标签。

像这样的东西:

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

名称将是可编辑的文本框等。

最好使用什么组件?

我还将在文本字段下方有按钮。目前我有一个JFrame运行正常。它会弹出一个窗口,其中包含正确的菜单选项。但是当我尝试这样做时:

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

我得到一个错误。我想要一个两列和 5 行(可能是 6 行)的网格布局。我想在左列有一个标签,在右列有一个文本框。然后是底部的两个按钮,居中。

4

1 回答 1

4

您最好将字段和控件(按钮)分成单独的面板,这样您就可以为每个面板提供不同的布局管理器。

我将从JPanel使用BorderLayout.

在此之上,我将在该位置添加“字段”面板,CENTER并在该位置添加控件(按钮)SOUTH

对于字段,我会使用 a GridBagLayout,但我很挑剔,对于控制面板,我可能会使用 a 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 回答