【问题标题】:Does GridBagLayout require placeholder panels for empty cells?GridBagLayout 是否需要空单元格的占位符面板?
【发布时间】:2015-12-31 22:28:10
【问题描述】:

我做了一个简单的GridBagLayout,它在单元格 (0,0)、(1,0) 和 (0,1) 中添加了按钮。

JPanel panelMain = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
    c.gridx = 0;
    c.gridy = 0;
    panelMain.add(new JButton("0,0"),c);

    c.gridx = 1;
    c.gridy = 0;
    panelMain.add(new JButton("1,0"),c);

    c.gridx = 0;
    c.gridy = 1;
    panelMain.add(new JButton("0,1"),c);

我很高兴看到最终的 UI:

我想在未连接到现有单元格的单元格中添加JButton。我希望它被一个空白空间隔开。当我尝试这个时,新的JButton 被集中在其他的旁边。这是补充:

JPanel panelMain = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
    c.gridx = 0;
    c.gridy = 0;
    panelMain.add(new JButton("0,0"),c);

    c.gridx = 1;
    c.gridy = 0;
    panelMain.add(new JButton("1,0"),c);

    c.gridx = 0;
    c.gridy = 1;
    panelMain.add(new JButton("0,1"),c);

    c.gridx = 3;
    c.gridy = 0;
    panelMain.add(new JButton("3,0"),c);

输出:

JButton("3,0") 显示在单元格 (2,0) 处。我是否需要在单元格 (2,0) 中使用空的 JPanel 作为占位符?更重要的是,为什么会这样?

【问题讨论】:

    标签: java swing gridbaglayout


    【解决方案1】:

    除非在gridx = 2 中放置了组件,否则布局不知道2,0 的宽度应该是多少。当您完成 UI 时,如果放置了任何组件,它应该看起来不错。例如:

    在其他情况下,您可以添加空的JPanel,其背景颜色与容器的背景颜色匹配。

    【讨论】:

      【解决方案2】:

      我是否需要在单元格 (2,0) 中使用空的 JPanel 作为占位符?

      您可以使用“插入”网格包约束在组件之间留出空间。阅读 How to Use GridBagLayout 上的 Swing 教程,了解有关插入约束的更多信息。

      或者,如果您想要一个占位符,那么您可以使用Box.createHorizontalStrut(...) 轻松指定宽度。

      更重要的是,为什么会这样?

      除非单元格中有组件,否则单元格没有大小。每个单元格相互独立,那么您希望单元格 (2,0) 的大小是多少?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-13
        相关资源
        最近更新 更多