【问题标题】:GridBagLayout does not display a componentGridBagLayout 不显示组件
【发布时间】:2020-05-03 10:47:50
【问题描述】:

我写了一个组件来显示一个圆形进度条。当我把它放在BorderLayout 时,一切看起来都很好。

但是当设置了GridBagLayout 时就看不到了。

    p.setLayout(new GridBagLayout());
    GridBagConstraints gbc = new GridBagConstraints();
    gbc.gridx = 0;
    gbc.gridy = 0;
    p.add(north(), gbc);
    gbc.gridx = 0;
    gbc.gridy = 1;
    p.add(west(), gbc);
    gbc.gridx = 1;
    gbc.gridy = 1;
    p.add(bar, gbc);

不知道是GridBagConstraints设置的问题还是其他原因。

【问题讨论】:

  • 如需更好的帮助,请edit 添加minimal reproducible exampleShort, Self Contained, Correct Example。 BTW 1) 从截断标签的外观来看,代码似乎在猜测帧的大小。取而代之的是pack()。 2) 当一个组件的空间太小时,GBL 不能很好地发挥作用。它通常根本不会显示它。所以,再次,pack() 顶级容器。

标签: java swing layout-manager gridbaglayout


【解决方案1】:

但是设置了GridBagLayout的时候就看不到了。

可能是因为您没有覆盖组件的 getPreferredSize() 方法,所以首选大小为 (0, 0)。

GridBagLayout 将尝试以其首选大小显示组件。

我猜你在添加组件时需要使用fill 约束,以便它可以自动调整大小以填充单元格中的可用空间。阅读 How to Use GridBagLayout 上的 Swing 教程部分,了解更多信息和示例。

当我把它放在 BorderLayout 中时,一切看起来都很好。

当添加到 BorderLayout 的 CENTER 时,组件将调整大小以填充可用空间。

【讨论】:

  • 非常感谢关于使用fill() 的建议。这就是我如何解决问题的关键。虽然它看起来像是被左侧的面板覆盖,但可以看到它。所以我还将weightxweighty 都设置为extreme(1.0),以防止组件在中心聚集在一起,这使它看起来像我想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-10
  • 2012-08-31
  • 2017-12-17
  • 2011-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多