【问题标题】:How to set java swing component size to its enclosing parent size. ex: setting JLabel size to its enclosing JPanel size.如何将 java swing 组件大小设置为其封闭的父大小。例如:将 JLabel 大小设置为其封闭的 JPanel 大小。
【发布时间】:2014-03-15 19:37:18
【问题描述】:

如何将 java swing 组件的大小设置为其封闭的父级大小。例如:将 JLabel 大小设置为其封闭的 JPanel 大小。

就像 android 的 Wrap_parent 选项一样。

【问题讨论】:

  • 查看this answer,了解哪些组件stretch子组件,哪些组件不

标签: java swing user-interface


【解决方案1】:

解决它的一种方法是在父级中覆盖 doLayout()。在该方法中,您可以按照自己喜欢的方式设置标签的边界。

【讨论】:

  • -1,应该没有理由重写 doLayout()。这是为 JTable 等自定义组件完成的。 Swing 旨在使用布局管理器。如果您需要自定义布局,请创建自定义布局管理器。但是,不需要创建自定义布局,因为许多 Swing 布局管理器都会提供所需的功能。
  • 一方面,如果父容器的其他隔间中有任何其他组件,则上面推荐的基于 BorderLayout 的解决方案将不起作用。 doLayout 虽然我同意这是一个有问题的解决方案,但实际上在某些情况下非常方便。并且作为一种非最终方法,API 设计并不建议人们不应该使用它。
  • 当然它仍然可以工作。 NORTH、SOUTH、EAST 和 WEST 的组件将占据它们所需的空间。其余的空间将进入中心,因此标签将占据该空间,无论它是什么。您的建议绝对是有问题的,并且绝对不需要解决问题,尤其是当有更简单和直接的解决方案可用时。
  • 最初的问题是:如何将 java swing 组件大小设置为其封闭父级大小。如果父容器中还有其他组件(即 BorderLayout),您将无法通过将组件放入 CENTER 来将其调整为完整大小,因为其他组件会占用空间。
  • 如果你想让组件占据面板的所有空间,那你为什么还要在面板中添加其他组件呢?但是,即使您对问题的看法很复杂,您也可以轻松地创建一个带有 BorderLayout 的 JPanel,将一个组件添加到 WEST,然后创建另一个带有 BorderLayout 的面板。将标签添加到此面板,然后将第二个面板添加到第一个面板。现在您已经满足了标签占用面板中所有空间的要求。但这将是一个不必要的复杂解决方案。
【解决方案2】:

在封闭的父呼叫.setLayout(new BorderLayout());BorderLayout 的中心(默认)单元格中的组件被强制匹配其容器的大小。

【讨论】:

  • yourPanel.setLayout(new BorderLayout());
猜你喜欢
  • 1970-01-01
  • 2014-06-05
  • 1970-01-01
  • 1970-01-01
  • 2012-09-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-03
  • 1970-01-01
相关资源
最近更新 更多