Java 自动调整swing元素的大小以适合容器';s码

Java 自动调整swing元素的大小以适合容器';s码,java,swing,Java,Swing,我不确定我需要的是否可能。 我有一个包含一些内部元素的容器(JPanel)。 我想知道是否有可能强制内部元素适应容器的大小。 我需要他们是完全可见的,即调整大小,以适应内部面板的大小,而不是削减一些内部元素的部分 滚动不是一个选项 这是否可以通过使用布局或其他方式实现 编辑:重要澄清: 问题是,我既不能访问内部元素,也不能访问它们的属性,因此我想说,需要一个能够调整子元素大小以适应其大小的Layoutmanager。我测试了BorderLayout和GridBagLayout,但结果总是一样的,

我不确定我需要的是否可能。 我有一个包含一些内部元素的容器(JPanel)。 我想知道是否有可能强制内部元素适应容器的大小。 我需要他们是完全可见的,即调整大小,以适应内部面板的大小,而不是削减一些内部元素的部分

滚动不是一个选项

这是否可以通过使用布局或其他方式实现

编辑:重要澄清:
问题是,我既不能访问内部元素,也不能访问它们的属性,因此我想说,需要一个能够调整子元素大小以适应其大小的Layoutmanager。我测试了BorderLayout和GridBagLayout,但结果总是一样的,内部元素被切掉。

您可以根据情况使用布局,如GridBagLayout或BorderLayout。使用适当的权重是可能的。

您可以将
JPanel
布局设置为边框布局,然后将单个子级添加到中心。如果有多个子对象,此方法将变得不太有用,因为添加到
北部
南部
东部
西部
的组件将保持静态大小,而中心将调整大小以填充其余部分

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


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

我觉得你应该看看合适的布局管理器并使用它。例如,查看BorderLayout-将组件放在中心,它将占据所有区域。由每个混凝土布局管理器决定构件的大小。
马克

正是因为这个原因才存在的。所有
layoutmanager
都直接用于简单容器,不包括能够直接处理大多数完整GUI的
GridBagLayout

对于大多数用户界面,您有以下几种选择:

  • 查找第三部分布局,如或
  • 使用
  • 非常简单的方法是使用嵌套布局,其中有多个
    JPanel
    ,每个子
    JPanel
    具有相同或不同的
    LayoutManager
  • 或者,应该很难…,但与使用
    GridBagLayout

我在JDesktopPane内部使用了一个JInternalFrame。我希望在调整桌面窗格的大小时,内部框架能够自动调整大小,因此我必须为放置以下代码的内部框架实现AncestorResized事件:

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

这对我很有效:)

LayoutManager是显而易见的解决方案。如果你说你想如何准确地显示你的组件,可能有人会建议你一个更好的
LayoutManager
。“显而易见”的答案是展开组件(例如
JTree
),将它们添加到没有
JScrollPane
的布局中,在框架上调用
pack()
,然后调用
frame.setMinimumSize>(frame.getSize());
.Job done.听起来很奇怪,你不能访问“内部元素”的属性,这些元素是
JComponent
s对吗?那么,你可以访问
JComponent
的任何标准属性,尤其是大小。如果自定义布局与GBL“相同”,为什么不使用GBL?;)链接和选项为+1。作为一般建议:-内部框架可以被视为一个例外,因为它们相对于父桌面平面的大小不受布局管理器的控制。但是,问题不是关于内部框架,是吗:-)