我试图绘制一个侧边栏,我工作的一个项目。我选择使用GridBagLayout的,因为我感到十分失望的BoxLayout的局限性。有人能帮忙解释一下我做错了。我想是的侧栏包含两个JPanels。我有地方的代码它们一半,侧边栏,而不是在顶部。有人能解释我在这里失踪。

    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);
有帮助吗?

解决方案

的GridBagLayout将仅分配足够的垂直空间,一个部件需要,留下其余部分为空白。我希望你看到你的侧边栏组件垂直居中?

在以“推”的组件时,需要设置一个垂直权重。如果设置weighty约束,以1.0的最后一个组件,它会占用该组件的所有剩余的垂直空间,其余推至顶部。 (您可能还需要锚定,上面板GridBagConstraints.NORTH)。

c.weighty = 1.0前尝试sideBar.add(buttonBar, c);

其他提示

scroll top