【发布时间】:2014-02-14 21:58:34
【问题描述】:
我想创建一个数据输入选项卡,如下所示以及几个按钮:
其中所有文本字段的宽度为 3,“姓名”和“支付金额”的高度为 1,而地址的高度为 3。它们之间有 1 条线的垂直间隙。
为此我编写了如下代码:(data_panel 与 button_panel 分离,以便更好地放置组件)
private JLabel label_name;
private JTextField text_name;
private JLabel label_address;
private JTextField text_address;
private JLabel label_amount_paid;
private JTextField text_amount_paid;
private JButton button_add_member;
private JButton button_remove_member;
private JButton button_remove_all;
public TabPanesAddRemove() {
setLayout(new GridLayout(2, 1));
JPanel data_panel = new JPanel(new GridBagLayout()); // data entry panel
GridBagConstraints gbc = new GridBagConstraints();
// gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx = 1;
gbc.gridy = 1;
gbc.gridwidth = 1;
label_name = new JLabel("Name: ");
data_panel.add(label_name, gbc);
text_name = new JTextField(20);
text_name.setName("name");
gbc = new GridBagConstraints();
// gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx = 2;
gbc.gridy = 1;
gbc.gridwidth = 3;
data_panel.add(text_name, gbc);
label_address = new JLabel("Address: ");
gbc = new GridBagConstraints();
// gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx = 1;
gbc.gridy = 3;
gbc.gridwidth = 1;
data_panel.add(label_address, gbc);
text_address = new JTextField(20);
text_address.setName("address");
gbc = new GridBagConstraints();
// gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx = 2;
gbc.gridy = 3;
gbc.gridwidth = 3;
gbc.gridheight = 3;
data_panel.add(text_address, gbc);
label_amount_paid = new JLabel("Amount Paid: ");
gbc = new GridBagConstraints();
// gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx = 1;
gbc.gridy = 7;
gbc.gridwidth = 1;
// gbc.gridheight = 1;
data_panel.add(label_amount_paid);
text_amount_paid = new JTextField(20);
text_amount_paid.setName("amount");
gbc = new GridBagConstraints();
// gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx = 2;
gbc.gridy = 7;
gbc.gridwidth = 3;
data_panel.add(text_amount_paid);
add(data_panel);
JPanel buttons_panel = new JPanel(); // button panel
button_add_member = new JButton(BUTTON_ADD);
button_remove_member = new JButton(BUTTON_REMOVE);
button_remove_all = new JButton(BUTTON_REMOVE_ALL);
buttons_panel.add(button_add_member);
buttons_panel.add(button_remove_member);
buttons_panel.add(button_remove_all);
add(buttons_panel);
Event ev = new Event();
button_add_member.addActionListener(ev);
button_remove_member.addActionListener(ev);
button_remove_all.addActionListener(ev);
}
这段代码给了我如下输出:
仔细观察:
我尝试了各种更改,包括使用gbc.fill 以及JTextField()、gbc.gridx 和gbc.gridy 中的不同尺寸等。但我无法得到想要的结果。
谁能帮我解决问题?
【问题讨论】:
-
我可以建议您使用 WindowBuilder 插件吗?不仅省了很多工作,还可以通过查看生成的代码来学习
标签: java swing user-interface awt gridbaglayout