我正在编写一个类,我希望能够在垂直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);
}
}
答案 0 :(得分:4)
如果您在this.setBorder(BorderFactory.createLineBorder(Color.BLACK))
类和Panel
嵌套panel.setBorder(BorderFactory.createLineBorder(Color.RED))
中调用JPanel
,您会发现这些组件之间没有“空白”。
将Panel
的布局管理器替换为BoxLayout
,您将获得以下内容 -
说实话,你只需要和布局管理员一起玩吧。我建议您在继续使用Swing之前阅读Laying Out Components Within a Container。