【问题标题】:java Box.glue not working as expectedjava Box.glue 没有按预期工作
【发布时间】:2011-07-25 19:21:16
【问题描述】:

我正在编写一个类,我希望能够将未知数量的面板添加到垂直 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);
}
}

【问题讨论】:

  • 您希望它们如何布局?所以它们在 GUI 顶部水平相邻?
  • 没有垂直布局(boxlayout.pageaxis),但我希望所有的空步都在底部而​​不是它们之间,这就是我添加胶水的原因,但你可以看到胶水对我没有多大好处出于某种原因

标签: java swing


【解决方案1】:

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



编辑

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    • 1970-01-01
    • 2018-11-12
    • 2018-11-26
    • 1970-01-01
    • 2021-10-19
    • 2020-03-18
    相关资源
    最近更新 更多