为什么GridBagLayout集中我的组件而不是把它放在角落?

Cra*_*lus 16 java user-interface swing gridbaglayout

到目前为止,我设法尽可能避免使用GridBagLayout(手动代码),但这次我无法避免,我正在阅读SUN的教程GridBagLayout 到目前为止它还不顺利.我想我很想念一些事情.
例如,我尝试以下代码(类似于SUN的帖子中的代码):

public class MainFrame extends JFrame { 


    public static void main(String args[]) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    MainFrame frame = new MainFrame();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame
     */
    public MainFrame() {
        super();
        setBounds(100, 100, 500, 375);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        Container mainContainer = getContentPane();

        mainContainer.setLayout(new GridBagLayout());       

        //add label
        JLabel someLabel = new JLabel("Label 1:");
        GridBagConstraints constraints = new GridBagConstraints();

        constraints.gridx = 0;
        constraints.gridy = 0;
        //constraints.anchor = GridBagConstraints.FIRST_LINE_START;
        //constraints.weightx = 0.5;
        mainContainer.add(someLabel, constraints);      

        JTextField someText = new JTextField(30);

        constraints = new GridBagConstraints();

        constraints.gridx = 1;
        constraints.gridy = 0;
        constraints.weightx = 0.5;
        mainContainer.add(someText, constraints);

        //
    }

}
Run Code Online (Sandbox Code Playgroud)

我在框架的中心将标签和文本字段放在另一个旁边.
但是我期待它们会出现在左上角,因为gridx和gridy是标签的0.
即使我设置constraints.anchor = GridBagConstraints.FIRST_LINE_START;了相同的结果.
我错了吗?
来自SUN的帖子:

指定组件左上角的行和列.最左边的列的地址为gridx = 0,顶行的地址为gridy = 0.

Ben*_*ole 13

添加constraints.weighty = 1;到JLabel约束和constraints.anchor = GridBagConstraints.NORTHWEST;TextField约束.

编辑:

来自Oracle的GridBagLayout指南:

较大的数字表示组件的行或列应该获得更多空间.对于每列,权重与为该列中的组件指定的最高权重x相关,每个多列组件的权重在组件所在的列之间以某种方式分割.类似地,每行的权重与为a指定的最高权重相关.该行中的组件.额外的空间倾向于最右边的列和底行.

  • 此外,在他们的代码示例中,带有注释的这行代码出现了:`c.weighty = 1.0; //请求任何额外的垂直空间 (2认同)

cam*_*ckr 13

您需要在Swing教程中进一步了解weightX/weightY它所声明的部分:

除非您为weightx或weighty指定至少一个非零值,否则所有组件在其容器的中心聚集在一起.

您指定了weightX但不是weightY.

编辑,这比我想象的要复杂得多.看来你还需要指定:

constraints.anchor = GridBagConstraints.FIRST_LINE_START;
Run Code Online (Sandbox Code Playgroud)

两个组件的重量相加.