本教程是针对JDK 8编写的。本页面中描述的示例和实践不利用后续版本中引入的改进,并且可能使用不再可用的技术。
有关Java SE 9及后续版本中更新的语言特性的摘要,请参阅Java语言更改。
有关所有JDK版本的新功能、增强功能以及删除或弃用选项的信息,请参阅JDK发行说明。
尽管可以不使用布局管理器,但如果可能的话,应该尽量使用布局管理器。布局管理器使得调整组件外观(与外观相关)、不同字体大小、容器大小变化和不同语言环境更加容易。布局管理器也可以轻松地被其他容器和程序重用。
GroupLayout
布局管理器结合构建工具来布局您的GUI。其中一种构建工具是NetBeans IDE。否则,如果您想手动编码而不想使用GroupLayout
,那么GridBagLayout
被推荐作为下一个最灵活和强大的布局管理器。
如果您有兴趣使用JavaFX来创建GUI,请参阅在JavaFX中使用布局。
如果一个容器中的组件的大小不受容器的大小、字体、外观或语言的影响,则绝对定位可能是合理的。桌面窗格(包含内部窗体)属于此类别。内部窗体的大小和位置不直接取决于桌面窗格的大小。程序员确定内部窗体在桌面窗格中的初始大小和位置,然后用户可以移动或调整窗体的大小。在这种情况下,布局管理器是不必要的。
另一种适用于绝对定位的情况是自定义容器,它执行对容器特定的大小和位置计算,并可能需要了解容器的特殊状态。这就是分割窗格的情况。
创建一个没有布局管理器的容器涉及以下步骤。
setLayout(null)
将容器的布局管理器设置为null。Component
类的setbounds
方法。Component
类的repaint
方法。但是,如果包含容器的窗口调整大小,使用绝对定位的容器可能会导致问题。
这是一个内容窗格使用绝对定位的框架的快照。
点击"启动"按钮使用Java™ Web Start运行AbsoluteLayoutDemo(下载JDK 7或更高版本)。或者,要自己编译和运行示例,请参考示例索引。
其代码位于AbsoluteLayoutDemo.java
。下面的代码片段显示了如何创建和布局内容窗格中的组件。
pane.setLayout(null); JButton b1 = new JButton("one"); JButton b2 = new JButton("two"); JButton b3 = new JButton("three"); pane.add(b1); pane.add(b2); pane.add(b3); Insets insets = pane.getInsets(); Dimension size = b1.getPreferredSize(); b1.setBounds(25 + insets.left, 5 + insets.top, size.width, size.height); size = b2.getPreferredSize(); b2.setBounds(55 + insets.left, 40 + insets.top, size.width, size.height); size = b3.getPreferredSize(); b3.setBounds(150 + insets.left, 15 + insets.top, size.width + 50, size.height + 20); ...//在main方法中: Insets insets = frame.getInsets(); frame.setSize(300 + insets.left + insets.right, 125 + insets.top + insets.bottom);