如何在Java中格式化GUI上的布局
所以我添加了我的标签和所有内容,但我仍然无法格式化和对齐所有内容。“计算”按钮显然应该居中。我知道使用gridbag会将框架拆分为坐标系,当一列比其他列大时,它会调整其他列并将其丢弃(对吗?)。但我甚至不知道如何解决这个问题。但仍然无法将所有东西都向左对齐,这样它就不会开始朝向中心如何在Java中格式化GUI上的布局,java,user-interface,Java,User Interface,所以我添加了我的标签和所有内容,但我仍然无法格式化和对齐所有内容。“计算”按钮显然应该居中。我知道使用gridbag会将框架拆分为坐标系,当一列比其他列大时,它会调整其他列并将其丢弃(对吗?)。但我甚至不知道如何解决这个问题。但仍然无法将所有东西都向左对齐,这样它就不会开始朝向中心 JPanel p = new JPanel(new GridBagLayout()); GridBagConstraints gc = new GridBagConstraints(); //0 Column
JPanel p = new JPanel(new GridBagLayout());
GridBagConstraints gc = new GridBagConstraints();
//0 Column
gc.gridx = 0;
gc.gridy = 0;
gc.anchor = GridBagConstraints.EAST;
p.add(new JLabel("Mortgage amount:"),gc);
gc.gridx = 0;
gc.gridy =1;
p.add(new JLabel("Mortgage term:"),gc);
gc.gridx = 0;
gc.gridy = 2;
p.add(new JLabel("Interest rate:"),gc);
gc.gridx = 0;
gc.gridy = 3;
p.add(new JLabel("Mortgage start date:"),gc);
gc.gridx = 0;
gc.gridy= 4;
p.add(new JLabel("Monthly Payments:"),gc);
gc.gridx = 0;
gc.gridy = 7;
p.add(new JLabel("Extra payments"),gc);
gc.gridx = 0;
gc.gridy = 8;
p.add(new JLabel("Adding: "),gc);
gc.gridx = 0;
gc.gridy = 9;
p.add(new JLabel("Adding: "),gc);
gc.gridx = 0;
gc.gridy = 10;
p.add(new JLabel("Adding: "),gc);
gc.gridx = 0;
gc.gridy = 11;
p.add(new JLabel("Changes paid off date to:"),gc);
//1 Column
gc.gridx = 1;
gc.gridy = 0;
p.add(new JLabel("$"),gc);
gc.gridx = 1;
gc.gridy = 4;
p.add(new JLabel("$"),gc);
gc.gridx = 1;
gc.gridy = 8;
p.add(new JLabel("$"),gc);
gc.gridx = 1;
gc.gridy = 9;
p.add(new JLabel("$"),gc);
gc.gridx = 1;
gc.gridy = 10;
p.add(new JLabel("$"),gc);
//2 column
gc.gridx = 2;
gc.gridy = 0;
p.add(new JTextField(8),gc);
gc.gridx = 2;
gc.gridy =1;
p.add(new JTextField(8),gc);
gc.gridx = 2;
gc.gridy = 2;
p.add(new JTextField(8),gc);
gc.gridx = 2;
gc.gridy = 3;
p.add(new JComboBox(month),gc);
gc.gridx= 2;
gc.gridy = 4;
p.add(new JTextField(8),gc);
gc.gridx = 2;
gc.gridy = 8;
p.add(new JTextField(8),gc);
gc.gridx = 2;
gc.gridy = 9;
p.add(new JTextField(8),gc);
gc.gridx = 2;
gc.gridy = 10;
p.add(new JTextField(8),gc);
//3 column
gc.gridx = 3;
gc.gridy = 1;
p.add(new JLabel(" years or "),gc);
gc.gridx = 3;
gc.gridy = 2;
p.add(new JLabel(" % per year"),gc);
gc.gridx = 3;
gc.gridy = 3;
p.add(new JComboBox(days),gc);
gc.gridx = 3;
gc.gridy = 8;
p.add(new JLabel("to your monthly mortgage payment"),gc);
gc.gridx = 3;
gc.gridy = 9;
p.add(new JLabel("as an extra yearly mortgage payment every "),gc);
gc.gridx = 3;
gc.gridy = 10;
p.add(new JLabel("as a one-time payment in "),gc);
//4 column
gc.gridx = 4;
gc.gridy = 1;
p.add(new JTextField(8),gc);
gc.gridx = 4;
gc.gridy=3;
p.add(new JComboBox(years),gc);
//5 column
gc.gridx = 5;
gc.gridy = 1;
p.add(new JLabel(" months"),gc);
gc.gridy=5;
gc.anchor = GridBagConstraints.CENTER;
p.add(new JButton("Calculate"),gc);
add(p, BorderLayout.NORTH);
}
}
对于标签,请尝试使用类似于
//...
gc.anchor = GridBagConstraints.EAST;
add(amount,gc);
//...
gc.anchor = GridBagConstraints.WEST;
add(amountfield, gc);
对于您的字段,请尝试使用类似于
//...
gc.anchor = GridBagConstraints.EAST;
add(amount,gc);
//...
gc.anchor = GridBagConstraints.WEST;
add(amountfield, gc);
anchor
根据剩余可用空间定义组件在其单元内的对齐方式。它也可用于影响组件的垂直定位
有关更多详细信息,请参阅
例如
public class TestPane extends JPanel {
public TestPane() {
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.anchor = GridBagConstraints.EAST;
add(new JLabel("Mortage Amount: $"), gbc);
gbc.gridy++;
add(new JLabel("Mortage term: "), gbc);
gbc.gridx += 2;
add(new JLabel("Years or "), gbc);
gbc.gridx += 2;
gbc.anchor = GridBagConstraints.WEST;
add(new JLabel(" months "), gbc);
gbc.anchor = GridBagConstraints.EAST;
gbc.gridx = 0;
gbc.gridy++;
add(new JLabel("Interest rate: "), gbc);
gbc.gridx = 1;
gbc.gridy = 0;
gbc.anchor = GridBagConstraints.WEST;
add(new JTextField(10), gbc);
gbc.gridy++;
add(new JTextField(10), gbc);
gbc.gridx += 2;
add(new JTextField(10), gbc);
gbc.gridx = 1;
gbc.gridy++;
add(new JTextField(10), gbc);
}
}
当我使用锚定时,定位只是停留在中心位置,是什么原因造成的?您使用的是fill属性吗?我不是,但这会如何影响将JLabel定位到左上角?fill将使组件占据整个单元格(垂直/水平/两者),这使得锚定不相关