如何在GridBagLayout中的JTextField旁边对齐JLabel

时间:2015-03-20 14:22:28

标签: java swing jlabel jtextfield gridbaglayout

我的表单很简单我只想在文本字段旁边添加标签。标签是默认居中的,它使表单看起来很奇怪。我想要文本字段旁边的标签。我玩过标签和文本字段的水平对齐,但它没有改变任何东西。

这是我的代码:

JPanel root = new JPanel(new GridBagLayout());
                 GridBagConstraints gbc = new GridBagConstraints();
                 gbc.insets= new Insets(0,0,0,0);

                 newVehicleRecord.setLayout(new BorderLayout());
                 newVehicleRecord.add(root,BorderLayout.PAGE_START);


                 JLabel title = new JLabel("New Vehicle Record - Customer ID:" + customerIDInfo.getText());
                 title.setFont(fontTitle);
                 gbc.weightx = 0;
                 gbc.gridx = 0; gbc.gridy = 0; gbc.gridwidth= 2;

                 root.add(title,gbc);

                 gbc.gridx = 0; gbc.gridy = 0; gbc.gridwidth= 1;
                 root.add(Box.createVerticalStrut(15),gbc);


                 gbc.gridx = 0; gbc.gridy = 2;
                 JLabel classificationLabel = new JLabel("Classification:");
                 classificationLabel.setHorizontalAlignment(JLabel.RIGHT);
                 root.add(classificationLabel,gbc);

                 gbc.gridx = 1; gbc.gridy = 2;
                 JTextField classificationTextField = new JTextField(10);
                 classificationTextField.setHorizontalAlignment(JTextField.LEFT);
                 root.add(classificationTextField,gbc);

                 gbc.gridx = 0; gbc.gridy = 3;
                  JLabel modelLabel = new JLabel("Model:");
                 root.add(modelLabel,gbc);

                 gbc.gridx = 1; gbc.gridy = 3;
                 JTextField modelTextField = new JTextField(10);
                 root.add(modelTextField,gbc);

                 gbc.gridx = 0; gbc.gridy = 4;
                  JLabel makeLabel = new JLabel("Make:");
                 root.add(makeLabel,gbc);

                 gbc.gridx = 1; gbc.gridy = 4;
                 JTextField makeTextField = new JTextField(10);
                 root.add(makeTextField,gbc);

我得到以下显示:http://prntscr.com/6j3iki

正如您所看到的,标签和文本字段之间有很多空白空间,我不想要。

2 个答案:

答案 0 :(得分:4)

  

我希望标签紧挨着文本字段。

您需要使用anchor约束:

gbc.anchor = GridBagConstraints.LINE_END;
panel.add(label, gbc);
gbc.anchor = GridBagConstraints.LINE_START;
panel.add(textField, gbc);

你也可能想要这样的东西:

gbc.insets = new Insets(5, 10, 5, 10);

因此标签的右边缘在文本字段的左边缘之间有一些空格。

阅读How to Use GridBagLayout上Swing教程中的部分,了解有关所有约束的更多信息。

答案 1 :(得分:1)

这样的事情:

             gbc.gridx = 0; gbc.gridy = 3;
             gbc.anchor = GridBagConstraints.EAST;
             JLabel modelLabel = new JLabel("Model:");
             root.add(modelLabel,gbc);

所以你需要添加一行

gbc.anchor = GridBagConstraints.EAST;

每个标签。

另一种可能性:

             gbc.gridx = 0; gbc.gridy = 3;
             gbc.fill = GridBagConstraints.HORIZONTAL;
             JLabel modelLabel = new JLabel("Model:");
             modelLabel.setHorizontalAlignment(SwingConstants.RIGHT);
             root.add(modelLabel,gbc);