解决常见的布局问题
Note:
本课涵盖了手工编写布局代码,这可能会很困难。如果您不希望了解布局 管理 的所有详细信息,则可能更喜欢将GroupLayout
布局 管理 器与构建器工具结合使用来布局 GUI。 NetBeans IDE是此类构建器工具之一。否则,如果您想手工编码并且不想使用GroupLayout
,那么推荐使用GridBagLayout
作为下一个最灵活,功能最强大的布局 管理 器。
如果您对使用 JavaFX 创建 GUI 感兴趣,请参阅在 JavaFX 中使用布局。
问题: 如何指定组件的确切尺寸?
-
一些较新的布局 管理 器提供了一些方法来覆盖由组件设置的大小。检查您使用的布局 管理 器是否允许您指定组件尺寸。
-
确保您确实需要设置组件的确切大小。每个 Swing 组件都有不同的首选大小,具体取决于它使用的字体以及外观。因此,通常没有必要指定 Swing 组件的确切大小。
-
如果组件不受布局 管理 器控制,则可以通过在其上调用
setSize
或setBounds
方法来设置其大小。否则,您需要提供尺寸提示,然后确保您使用的布局 管理 器尊重尺寸提示。 -
如果扩展了 Swing 组件类,则可以通过重写组件的
getMinimumSize
,getPreferredSize
和getMaximumSize
方法来提供大小提示。这种方法的好处是,每个getXxxxSize
方法都可以通过调用super.getXxxxSize()
获得组件的默认大小提示。然后,可以在返回之前调整大小(如果需要)。这对于文本组件特别方便,您可能需要固定宽度,但要根据内容确定高度。但是,有时GridBagLayout
和文本字段会遇到问题,其中如果容器的大小小于首选大小,则会使用最小大小,这会导致文本字段显着缩小。 -
提供大小提示的另一种方法是调用组件的
setMinimumSize
,setPreferredSize
和setMaximumSize
方法。 -
如果您为已经可见的组件指定新的尺寸提示,则需要在其上调用
revalidate
方法,以确保再次布置其包含层次结构。然后调用repaint
方法。
Note:
无论您如何指定组件的大小,请确保组件的容器使用的布局 管理 器尊重组件的请求大小。 FlowLayout
和GridBagLayout
管理 器使用组件的首选大小(后者取决于您设置的约束),但是BorderLayout
和GridLayout
通常不使用。 BoxLayout
管理 器通常使用组件的首选大小(尽管组件可以更大),并且是少数几个尊重组件最大大小的布局 管理 器之一。
问题: 将我的组件添加到容器后,它没有出现。
- 添加组件后,您需要先调用
revalidate
和repaint
,然后它才能显示在您的容器中。
问题: 我的自定义组件尺寸过小。
-
组件是否实现
getPreferredSize
和getMinimumSize
方法?如果是这样,它们是否返回正确的值? -
您是否正在使用可以使用可用空间的布局 管理 器?有关选择布局 管理 器并指定它使用特定组件的最大可用空间的一些提示,请参见选择布局 管理 器的提示。
如果在此列表中没有看到您的问题,请参阅解决常见组件问题。