带有GridBagLayout的java侧栏

带有GridBagLayout的java侧栏,java,user-interface,sidebar,gridbaglayout,layout-manager,Java,User Interface,Sidebar,Gridbaglayout,Layout Manager,我正试图为我正在进行的项目绘制一个侧边栏。我选择使用GridBagLayout是因为我对BoxLayout的局限性感到沮丧。有人能解释一下我做错了什么吗。我想要的是侧栏包含两个JPanel。我的代码将它们放在侧边栏的一半,而不是顶部。有人能解释一下我遗漏了什么吗 JPanel sideBar = new JPanel(); sideBar.setBounds(0, 0, 180, (int)this.getBounds().getHeight()); sideBar.se

我正试图为我正在进行的项目绘制一个侧边栏。我选择使用GridBagLayout是因为我对BoxLayout的局限性感到沮丧。有人能解释一下我做错了什么吗。我想要的是侧栏包含两个JPanel。我的代码将它们放在侧边栏的一半,而不是顶部。有人能解释一下我遗漏了什么吗

    JPanel sideBar = new JPanel();
    sideBar.setBounds(0, 0, 180, (int)this.getBounds().getHeight());
    sideBar.setLayout(new GridBagLayout());


    JPanel optionBar = new JPanel();
    optionBar.setBorder(BorderFactory.createTitledBorder("Box1"));
    optionBar.setLayout(new GridBagLayout());


    JPanel buttonBar = new JPanel();
    buttonBar.setBorder(BorderFactory.createTitledBorder("Options"));
    buttonBar.setLayout(new GridBagLayout());


    GridBagConstraints c = new GridBagConstraints();
    c.fill = GridBagConstraints.HORIZONTAL;
    c.gridx = 0;
    c.ipady = 5;
    c.insets = new Insets(10,0,0,0);


    JButton simplify;
    simplify = new JButton("Open");
    simplify.addActionListener( this.listener );
    c.gridy = 0;
    buttonBar.add(simplify, c);

    JButton mergeButton;
    mergeButton = new JButton("Close");
    mergeButton.addActionListener( this.listener );
    c.gridy = 1;
    buttonBar.add(mergeButton, c);

    JButton splitButton;
    splitButton = new JButton("Merge");
    splitButton.addActionListener( this.listener );
    c.gridy = 2;
    buttonBar.add(splitButton, c);

    c.insets = new Insets(0,5,5,5);
    c.gridy = 0;
    sideBar.add(optionBar, c);

    c.gridy = 1;
    c.ipadx = 70;
    sideBar.add(buttonBar, c);

    return(sideBar);
我的密码把它们放在 在侧边栏的一半位置,而不是在 顶部

您需要从阅读开始,学习如何正确使用布局管理器。BoxLayout比GridBagLayout简单得多,因为您不必学习如何指定约束。但是,如果您想使用GridBagLayout,请阅读“如何使用GridBagLayout”一节。您可能希望将注意力集中在处理“weightx和weighty”约束的部分。基于我有限的知识,这应该有助于解决问题

此外,在使用布局管理器时,不使用setBounds()或setSize()

我的密码把它们放在 在侧边栏的一半位置,而不是在 顶部

您需要从阅读开始,学习如何正确使用布局管理器。BoxLayout比GridBagLayout简单得多,因为您不必学习如何指定约束。但是,如果您想使用GridBagLayout,请阅读“如何使用GridBagLayout”一节。您可能希望将注意力集中在处理“weightx和weighty”约束的部分。基于我有限的知识,这应该有助于解决问题


此外,在使用布局管理器时,您不使用setBounds()或setSize()。

GridBagLayout将只分配组件所需的足够垂直空间,其余部分留空。我想你会看到你的侧栏部件垂直居中

为了“推出”组件,需要设置垂直重量。如果在最后一个组件上将
weight
约束设置为1.0,它将占用该组件的所有剩余垂直空间,并将其余部分推到顶部。(您可能还需要将最后一个面板定位到
GridBagConstraints.NORTH


在侧边栏之前尝试
c.weight=1.0
。添加(按钮栏,c)

GridBagLayout将只分配组件所需的足够垂直空间,其余空间为空。我想你会看到你的侧栏部件垂直居中

为了“推出”组件,需要设置垂直重量。如果在最后一个组件上将
weight
约束设置为1.0,它将占用该组件的所有剩余垂直空间,并将其余部分推到顶部。(您可能还需要将最后一个面板定位到
GridBagConstraints.NORTH


在侧边栏之前尝试
c.weight=1.0
。添加(按钮栏,c)

如果您熟悉/更熟悉HTML,可以使用。这是一个小型控制台工具,它接受布局描述(HTML表),并将其转换为配置GridBagLayout manager的等效布局描述

如果您熟悉/更熟悉HTML,可以使用。这是一个小型控制台工具,它接受布局描述(HTML表),并将其转换为用于配置GridBagLayout管理器的等效布局描述