自动调整摆动元素大小以适应容器的大小

不确定我的需要是否可行。 我有一个包含一些内部元素的容器(JPanel)。 我想知道是否可以强制内部元素适应容器的大小。 我需要它们完全可见,即resize以适应Panel的大小,而不是剪切内部元素的某些部分。

滚动不是一种选择。

这可以通过使用布局或其他东西吗?

编辑:重要的澄清:问题是我无法访问内部元素也不能访问它们的属性所以我想说一个Layoutmanager能够调整子元素的大小以适应它的大小。 我测试了BorderLayout和GridBagLayout,但结果始终相同,内部元素被删除。

正是因为布局管理器存在的原因。 所有LayoutManagers直接用于简单容器,不包括GridBagLayout ,它能够直接处理大多数完整的GUI。

对于大多数竞争GUI,您有以下选择:

  • 寻找第三方布局,例如MigLayout或此处
  • 使用GridBagLayout
  • 非常简单的方法是使用嵌套布局 ,其中有多个JPanel ,每个JPanels都有相同或不同LayoutManagerJPanels
  • 或者自定义布局 ,应该很难…,但与使用GridBagLayout相同

您可以将JPanel布局设置为边框布局,然后将单个子项添加到中心。 如果有多个孩子,这种方法变得不那么有用,因为添加到NORTHSOUTHEASTWEST将保持静态大小,而中心resize以填充剩余部分。

简而言之,这不是一个理想的解决方案。 由于不同的组件以不同的方式运行,因此Swing中的所有布局都变得更加复杂,因此您确实需要提供要添加到面板的子组件的更多详细信息,以及已在这些组件上覆盖的任何行为组件。

最好的方法是尝试几个简单的例子,看看你得到的里程数以及你的子组件嵌套的细微重新设计是否有帮助。

您可以根据具体情况使用GridBagLayout或BorderLayout等布局。 有适当的重量是可能的。

这听起来像你应该只是偷看一个合适的布局管理器并使用它。 例如,查看BorderLayout – 将您的组件放在CENTER中,它将占用所有区域。 它取决于每个具体的布局管理器来决定组件的大小。 标记

我在JDesktopPane中使用了JInternalFrame。 我希望internal_frame在调整桌面窗格大小时自动resize,所以我必须为内部框架实现AncestorResized事件,我在其中放置了以下代码:

  this.setPreferredSize(this.getParent().getPreferredSize()); this.pack(); 

它对我有用:)