如何在GridBagLayout中左对齐组件?

3

在这里输入图片描述

上图中的每一行都是使用gridbaglayout对组件进行布局的自定义组件。 我想要避免按钮“Abc”之前出现的空白,我希望它完全靠左。如何使用gridbaglayout约束来实现这一点?

编辑 添加源代码。

        gridBagConstraints = new GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.fill = GridBagConstraints.NONE;
        gridBagConstraints.insets =  new Insets(11,0,0,0);
        add(abcButton,gridBagConstraints);
            gridBagConstraints = new GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.fill = GridBagConstraints.NONE;
        gridBagConstraints.insets = new Insets(20, 10, 0, 0);
        add(comp1,gridBagConstraints);
        gridBagConstraints = new GridBagConstraints();
        gridBagConstraints.gridx = 2;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.fill = GridBagConstraints.NONE;
        gridBagConstraints.insets = new Insets(20, 35, 0, 0);
        add(comp2, gridBagConstraints);
        gridBagConstraints = new GridBagConstraints();
        gridBagConstraints.gridx = 3;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.ipadx = 120;
        gridBagConstraints.ipady = 3;
        gridBagConstraints.fill = GridBagConstraints.NONE;
        gridBagConstraints.insets = new Insets(11,20, 0, 0);
        add(txtField1, gridBagConstraints);
    btnTxtField1.setMargin(new Insets(2, 1, 2, 1));
        gridBagConstraints = new GridBagConstraints();
        gridBagConstraints.gridx = 4;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.ipadx = 0;
        gridBagConstraints.fill = GridBagConstraints.NONE;
        gridBagConstraints.insets = new Insets(11, 0, 0, 0);
        add(btnTxtField1, gridBagConstraints);
    gridBagConstraints = new GridBagConstraints();
    gridBagConstraints.gridx = 5;
    gridBagConstraints.gridy = 0;
    gridBagConstraints.ipadx = 120;
    gridBagConstraints.ipady = 3;
    gridBagConstraints.fill = GridBagConstraints.NONE;
    gridBagConstraints.insets = new Insets(11, 0, 0, 0);
    add(txtField2, gridBagConstraints);
    gridBagConstraints = new GridBagConstraints();
    gridBagConstraints.gridx = 6;
    gridBagConstraints.gridy = 0;
    gridBagConstraints.ipadx = 0;
    gridBagConstraints.fill = GridBagConstraints.NONE;
    gridBagConstraints.insets = new Insets(11, 0, 0, 0);
    add(btnTxtField2, gridBagConstraints);

添加权重后: enter image description here
1个回答

5
你需要将锚点设置为GridBagConstraints.NORTHWEST或类似的内容...
constraints.anchor = GridBagConstraints.WEST;

@Jay 好的。你能把你的源代码发出来吗?有时其他约束条件会表现得有点“奇怪”... - matcauthon
如果包含此组件的窗口不可调整大小,我认为我不需要指定任何权重吧? - Jay
2
添加此内容可将按钮左对齐:gridBagConstraints.weightx=1 - matcauthon
好的。我想我有一个更新。我尝试了constraints.anchor = GridBagConstraints.WEST和constraints.gridx=1.0d。那个起作用了,abc按钮完全移到了左边,但是,在下一个框/标签之前现在留下了巨大的空隙。我也希望这个框/标签向左移动。理想情况下,我希望组件之间的空间保持不变,但它们都应该向左推。 - Jay
我认为你需要将你的解决方案添加到所有其他组件中。 - matcauthon
让我们在聊天中继续这个讨论:http://chat.stackoverflow.com/rooms/13659/discussion-between-jay-and-matcauthon - Jay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接