java Box.glue无法按预期工作

时间:2011-07-25 19:21:16

标签: java swing

我正在编写一个类,我希望能够在垂直BoxLayout中向另一个JPanel添加未知数量的面板。这些面板每个都包含一个标签作为标题和另一个面板。我希望添加到面板的面板都位于面板的顶部(在这种情况下是Gui),所以我在底部添加了垂直胶水。我让一切都按预期工作,直到我需要重做一些代码才能将主面板(由gui表示)放在一个滚动窗格中。为了简单起见,我能够在以下代码中复制我的问题。在运行时,您会注意到胶水不占用空的空间,但它在其他面板之间分开。我已经为jframe设置了一个大小,而不是使用.pack()来说明这一点。

public class Gui extends JFrame {

public Gui() {
    getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.PAGE_AXIS));
    getContentPane().add(new Panel());
    getContentPane().add(new Panel());
    getContentPane().add(new Panel());
    getContentPane().add(new Panel());
    getContentPane().add(Box.createVerticalGlue());
}

public class Panel extends JPanel{

    public Panel(){
        this.setLayout(new BorderLayout());
        this.add(new JLabel("Title"), BorderLayout.NORTH);
        JPanel panel = new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
        this.add(panel);
        panel.add(new JButton("button"));
    }
}
public static void main (String[] args){
    Gui g = new Gui();
    g.setSize(240, 320);
    g.setLocationRelativeTo(null);
    g.setVisible(true);
    g.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

1 个答案:

答案 0 :(得分:4)

如果您在this.setBorder(BorderFactory.createLineBorder(Color.BLACK))类和Panel嵌套panel.setBorder(BorderFactory.createLineBorder(Color.RED))中调用JPanel,您会发现这些组件之间没有“空白”。


enter image description here


修改

Panel的布局管理器替换为BoxLayout,您将获得以下内容 -

enter image description here

说实话,你只需要和布局管理员一起玩吧。我建议您在继续使用Swing之前阅读Laying Out Components Within a Container