到目前为止,我设法避免了尽可能多地使用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);

        //
    }

}

我在框架的中心中将标签和文本字段一个接一个地放置。
但是我希望它们会显示在左上角,因为标签的gridx和gridy为0。
即使我设置了constraints.anchor = GridBagConstraints.FIRST_LINE_START;,结果仍然相同。
我在这里错了吗?
从SUN的帖子:

最佳答案

constraints.weighty = 1;添加到JLabel约束中,并将constraints.anchor = GridBagConstraints.NORTHWEST;添加到TextField约束中。

编辑:

从Oracle的GridBagLayout guide:

关于java - 为什么GridBagLayout使我的组件居中而不是放在角落?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7275189/

10-12 16:09