不确定我的需要是否可行。 我有一个包含一些内部元素的容器(JPanel)。 我想知道是否有可能强制内部元素适应容器的大小。 我需要它们完全可见,即调整大小以适应Panel的大小,而不是削减内部元素的某些部分。
滚动不是一种选择。
这可以通过布局或其他方式实现吗?
编辑:重要说明: 问题是我无法访问内部元素也不能访问它们的属性,所以我想说一个Layoutmanager能够调整子元素的大小以适应它的大小。我测试了BorderLayout和GridBagLayout,但结果始终相同,内部元素被删除。
答案 0 :(得分:12)
正是因为LayoutManagers存在的原因。所有LayoutManagers
直接用于简单容器,不包括GridBagLayout
,它能够直接处理大多数完整的GUI。
对于大多数竞争GUI,您有以下选择:
JPanel
且每个人都有JPanels
个LayoutManager
GridBagLayout
答案 1 :(得分:5)
您可以将JPanel
布局设置为边框布局,然后将单个子项添加到中心。如果有多个子项,则此方法变得不那么有用,因为添加到NORTH
,SOUTH
,EAST
和WEST
的组件将保持静态大小,而中心调整为填补剩余部分。
简而言之,这不是一个理想的解决方案。由于不同的组件以不同的方式运行,因此Swing中的所有布局都变得更加复杂,因此您确实需要提供要添加到面板的子组件的更多详细信息,以及已在这些组件上覆盖的任何行为组件。
最好的方法是尝试几个简单的例子,看看你得到的里程数以及你的子组件嵌套的细微重新设计是否有帮助。
答案 2 :(得分:0)
您可以根据具体情况使用GridBagLayout或BorderLayout等布局。有了适当的重量,就有可能。
答案 3 :(得分:0)
这听起来像你应该只是偷看一个合适的布局管理器并使用它。例如,查看BorderLayout - 将您的组件放在CENTER中,它将占用所有区域。由每个具体的布局管理器决定组件的大小。 马克
答案 4 :(得分:0)
我在JDesktopPane中使用了JInternalFrame。我希望internal_frame在调整桌面窗格大小时自动调整大小,所以我必须为内部框架实现AncestorResized事件,我在其中放置了以下代码:
this.setPreferredSize(this.getParent().getPreferredSize());
this.pack();
它对我有用:)