请查看以下代码
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class TestForm extends JFrame
{
private JLabel heightLabel, weightLabel, waistLabel, neckLabel, hipsLabel,bfPercentageLabel;
private JTextField heightTxt, weightTxt, waistTxt, neckTxt, hipsTxt;
private JPanel centerPanel;
private JPanel southPanel;
private JLabel endTargetWeightLabel;
private JLabel endTargetWeightResultLabel;
private JLabel fatMustLoseLabel;
private JLabel fatMustLoseResultLabel;
public TestForm()
{
//Declaring instance variables
heightLabel = new JLabel("Height: ");
weightLabel = new JLabel("Weight: ");
waistLabel = new JLabel("Waist: ");
neckLabel = new JLabel("Neck: ");
hipsLabel = new JLabel("Hips: ");
bfPercentageLabel = new JLabel("The Orginal Test Score Is: ");
heightTxt = new JTextField(7);
weightTxt = new JTextField(7);
waistTxt = new JTextField(7);
neckTxt = new JTextField(7);
hipsTxt = new JTextField(7);
endTargetWeightLabel = new JLabel("Your End Target Performance is: ");
fatMustLoseLabel = new JLabel("Sammple Performance You Must Lose: ");
endTargetWeightResultLabel = new JLabel("d");
fatMustLoseResultLabel = new JLabel("e");
this.add(createNorthPanel(),"North");
this.add(createCenterPanel(),"Center");
this.add(createSouthPanel(),"South");
this.add(new JPanel(),"West");
this.add(new JPanel(),"East");
this.setTitle("The Test Form");
this.pack();
this.setLocationRelativeTo(null);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private JPanel createNorthPanel()
{
JPanel northPanel = new JPanel();
northPanel = new JPanel();
northPanel.setLayout(new FlowLayout());
JLabel logoLabel = new JLabel();
logoLabel.setIcon(new ImageIcon(getClass().getResource("/images/TESTING-LOGO.gif")));
northPanel.add(logoLabel);
return northPanel;
}
private JPanel createCenterPanel()
{
centerPanel = new JPanel();
GridBagLayout gbl = new GridBagLayout();
GridBagConstraints gbc = new GridBagConstraints();
centerPanel.setLayout(gbl);
gbc.gridx = 1;
gbc.gridy = 1;
gbc.fill = GridBagConstraints.BOTH;
gbc.insets = new Insets(15,0,0,0);
centerPanel.add(heightLabel,gbc);
gbc.gridx = 2;
gbc.gridy = 1;
gbc.fill = GridBagConstraints.BOTH;
gbc.insets = new Insets(15,0,0,0);
centerPanel.add(heightTxt,gbc);
gbc.gridx = 3;
gbc.gridy = 1;
gbc.fill = GridBagConstraints.BOTH;
gbc.insets = new Insets(15,10,0,0);
centerPanel.add(weightLabel,gbc);
gbc.gridx = 4;
gbc.gridy = 1;
gbc.fill = GridBagConstraints.BOTH;
gbc.insets = new Insets(15,-10,0,0);
centerPanel.add(weightTxt,gbc);
gbc.gridx = 1;
gbc.gridy = 2;
gbc.fill = GridBagConstraints.BOTH;
gbc.insets = new Insets(15,0,0,0);
centerPanel.add(waistLabel,gbc);
gbc.gridx = 2;
gbc.gridy = 2;
gbc.fill = GridBagConstraints.BOTH;
gbc.insets = new Insets(15,0,0,0);
centerPanel.add(waistTxt,gbc);
gbc.gridx = 3;
gbc.gridy = 2;
gbc.fill = GridBagConstraints.BOTH;
gbc.insets = new Insets(15,10,0,0);
centerPanel.add(neckLabel,gbc);
gbc.gridx = 4;
gbc.gridy = 2;
gbc.fill = GridBagConstraints.BOTH;
gbc.insets = new Insets(15,-10,0,0);
centerPanel.add(neckTxt,gbc);
gbc.gridx = 5;
gbc.gridy = 2;
gbc.fill = GridBagConstraints.BOTH;
gbc.insets = new Insets(15,7,0,0);
centerPanel.add(hipsLabel,gbc);
gbc.gridx = 6;
gbc.gridy = 2;
gbc.fill = GridBagConstraints.BOTH;
gbc.insets = new Insets(15,5,0,0);
centerPanel.add(hipsTxt,gbc);
gbc.gridx = 1;
gbc.gridy = 5;
gbc.fill = GridBagConstraints.BOTH;
gbc.insets = new Insets(50,0,0,0);
gbc.gridwidth = 6;
centerPanel.add(bfPercentageLabel,gbc);
centerPanel.setBorder(BorderFactory.createTitledBorder("The Testing Form"));
centerPanel.setPreferredSize(centerPanel.getPreferredSize());
centerPanel.validate();
return centerPanel;
}
private JPanel createSouthPanel()
{
southPanel = new JPanel();
GridBagLayout gbl = new GridBagLayout();
GridBagConstraints gbc = new GridBagConstraints();
southPanel.setLayout(gbl);
gbc.gridx = 1;
gbc.gridy = 1;
gbc.fill = GridBagConstraints.BOTH;
gbc.insets = new Insets(10,0,0,0);
southPanel.add(endTargetWeightLabel,gbc);
gbc.gridx = 2;
gbc.gridy = 1;
gbc.fill = GridBagConstraints.BOTH;
gbc.insets = new Insets(10,5,0,0);
southPanel.add(endTargetWeightResultLabel,gbc);
gbc.gridx = 1;
gbc.gridy = 2;
gbc.fill = GridBagConstraints.BOTH;
gbc.insets = new Insets(10,0,0,0);
southPanel.add(fatMustLoseLabel,gbc);
gbc.gridx = 2;
gbc.gridy = 2;
gbc.fill = GridBagConstraints.BOTH;
gbc.insets = new Insets(10,5,0,0);
southPanel.add(fatMustLoseResultLabel,gbc);
southPanel.setPreferredSize(new Dimension(centerPanel.getWidth(),100));
southPanel.setBorder(BorderFactory.createTitledBorder("See Your End Target Weight"));
return southPanel;
}
public static void main(String[]args)
{
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
new TestForm();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
以上是可能的最大缩短代码。删除更多元素将不会显示原始错误。
行。现在的问题是关于对齐。运行代码后,您将看到以下内容。
正如您在那里看到的那样,southPanel
中的元素与centerPanel
不能很好地对齐。这意味着,我希望southPanel
JLabel进入centerPanel
JLabels开始的同一行。但它最终以这种方式结束。我希望southPanel
中的JLabel出现在centerPanel
的JLabel开始的同一行中。我所说的内容清楚地显示在下图中。我该怎么做?请帮忙!
PS:我正在附上"测试图像"同样,如果你愿意,你可以测试它。
答案 0 :(得分:1)
由于每个面板水平居中,除非它们具有相同的宽度,否则它们不会对齐。将它们放在一个公共面板中并分享GridBagLayout
会更容易。
您可以更改顶级布局以左对齐您的组件(例如,在另一个GridBagLayout
中使用WEST / LEFT锚点。)
旁注:那些负面的插图会让你陷入困境。
旁注2:不要手动设置gridx和gridy,而是查看REMAINDER
旁注3:你的大多数gbc都是凹凸不平的。重用它们。
this.setLayout(new GridBagLayout());
this.add(createLeftPanel(), gbc);
...