java将组件添加到我的GridBagLayout会将其他组件移到最右边
当我试图展示我的JPanel
时,我看到了一些非常奇怪的结果。在添加最后一个JTextField
{
当我添加它时,它上面的JTextField
会向右移动,因此它从subline
结束的地方开始:
以下是创建此布局的代码:
public class Opspanel extends JPanel{
private static final long serialVersionUID = -6393281054430179953L;
public Opspanel() {
GridBagLayout layout = new GridBagLayout();
setLayout(layout);
GridBagConstraints constraints = new GridBagConstraints();
constraints.gridx = 0;
constraints.gridy = 0;
constraints.anchor = GridBagConstraints.LINE_START;
add(new JLabel("Vendor ID"), constraints);
constraints.gridx = 1;
constraints.gridy = 0;
constraints.anchor = GridBagConstraints.LINE_START;
JTextField vendorid = new JTextField();
vendorid.setPreferredSize(new Dimension(100,20));
add(vendorid, constraints);
constraints.gridx = 0;
constraints.gridy = 1;
constraints.anchor = GridBagConstraints.LINE_START;
add(new JLabel("Email Date"), constraints);
constraints.gridx = 1;
constraints.gridy = 1;
constraints.anchor = GridBagConstraints.LINE_START;
JTextField emaildate = new JTextField();
emaildate.setPreferredSize(new Dimension(100,20));
add(emaildate, constraints);
constraints.gridx = 2;
constraints.gridy = 1;
constraints.anchor = GridBagConstraints.LINE_START;
add(new JLabel("Email Time"), constraints);
constraints.gridx = 3;
constraints.gridy = 1;
constraints.anchor = GridBagConstraints.LINE_START;
JTextField emailtime = new JTextField();
emailtime.setPreferredSize(new Dimension(100,20));
add(emailtime, constraints);
constraints.gridx = 0;
constraints.gridy = 2;
constraints.anchor = GridBagConstraints.LINE_START;
add(new JLabel("Subject Line"), constraints);
constraints.gridx = 1;
constraints.gridy = 2;
constraints.anchor = GridBagConstraints.LINE_START;
JTextField subline = new JTextField();
subline.setPreferredSize(new Dimension(500, 20));
add(subline, constraints);
}
}
我怎样才能解决这个问题
# 1 楼答案
根据the docs for ^{}
在代码中,网格有3行4列。您告诉每个组件只占用一个单元格,位置由
gridx
和gridy
给出事实上,你不喜欢他们中的一些人“停止”或“开始”,这表明你真的希望他们中的一些人占据多个单元格强>
你真走运} :
GridBagLayout
可以做到这一点。您正在寻找^{在您的示例中,将“主题行”文本字段放在第二列(
gridx = 1
)。由于将gridwidth
保留为默认值1
,因此该文本字段不能与第三列或第四列重叠。因此,如果它增长,整个列必须随之增长您可以让它覆盖多个网格单元,从而填充整个水平空间。(如果您熟悉Microsoft Excel或Microsoft Word或类似程序中的表格,这类似于“合并单元格”选项。)
要使其覆盖3列,请从
gridx = 1
开始:或者,要使其覆盖从列
gridx = 1
到右侧的所有单元格:在使用它添加另一个应该只覆盖一列的组件之前,不要忘记将
gridwidth
重置为1