[英]Auto resize swing elements to fit to the container's size
不知道我需要什么。 我有一个包含一些内部元素的容器(JPanel)。 我想知道是否有可能迫使内部元素适应容器的大小。 我需要使它们完全可见,即调整其大小以适合面板的尺寸,并且不切割内部元素的某些部分。
滚动不是一种选择。
使用Layout或其他方法可以做到吗?
编辑:重要说明:问题是我无法访问内部元素,也无法访问其属性,因此我想说需要一个能够调整子元素大小以适合其大小的Layoutmanager。 我测试了BorderLayout和GridBagLayout,但结果始终相同,内部元素被裁剪掉。
正是出于这个原因,存在LayoutManagers 。 除不能够直接处理大多数完整GUI的GridBagLayout
,所有LayoutManagers
直接用于简单容器。
对于大多数竞争性GUI,您可以选择以下选项:
JPanel
且每个JPanels
都有具有相同或不同LayoutManager
子JPanels
GridBagLayout
相同 您可以将JPanel
布局设置为边框布局,然后将单个子项添加到中心。 如果有多个子代,则此方法的用处将减少,因为添加到NORTH
, SOUTH
, EAST
和WEST
将保持静态大小,而中心将调整大小以填充其余部分。
简而言之,这不是理想的解决方案。 由于不同组件的行为方式不同,因此Swing中的所有布局都变得更加复杂,因此,您确实需要提供希望添加到面板中的子组件的更多详细信息,以及那些已被覆盖的行为组件。
最好的方法是尝试几个简单的示例,以了解获得的里程数以及子组件嵌套的微妙重新设计是否会有所帮助。
我在JDesktopPane中使用了JInternalFrame。 我希望在调整桌面窗格的大小时对internal_frame进行自动调整大小,因此我必须为放置以下代码的内部框架实现AncestorResized事件:
this.setPreferredSize(this.getParent().getPreferredSize());
this.pack();
它对我有用:)
您可以根据情况使用GridBagLayout或BorderLayout之类的布局。 适当的重量是可能的。
在我看来,这应该只是偷看一个合适的布局管理器并使用它。 例如,查看BorderLayout-将您的组件放在CENTER中,它将占据所有区域。 由每个具体的布局管理者来决定组件的大小。 标记
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.