在没有布局 管理 器的情况下进行操作(绝对定位)

尽管没有布局 管理 器也是可以的,但您应该尽可能使用布局 管理 器。布局 管理 器使您可以更轻松地适应与外观相关的组件外观,不同的字体大小,容器的变化大小以及不同的语言环境。布局 管理 器还可以被其他容器和其他程序轻松地重用。

Note:

本课涵盖了手工编写布局代码,这可能会很困难。如果您不希望了解布局 管理 的所有详细信息,则可能更喜欢将GroupLayout布局 管理 器与构建器工具结合使用来布局 GUI。 NetBeans IDE是此类构建器工具之一。否则,如果您想手工编码并且不想使用GroupLayout,那么推荐使用GridBagLayout作为下一个最灵活,功能最强大的布局 管理 器。

如果您对使用 JavaFX 创建 GUI 感兴趣,请参阅在 JavaFX 中使用布局

如果容器中容纳的组件的大小不受容器的大小或字体,外观和语言的变化的影响,则绝对定位可能很有意义。包含internal frames的桌面窗格在此类别中。内部框架的大小和位置不直接取决于桌面窗格的大小。程序员确定桌面窗格中内部框架的初始大小和位置,然后用户可以移动或调整框架的大小。在这种情况下,不需要布局 管理 器。

绝对定位可能有意义的另一种情况是定制容器的情况,该容器执行特定于容器的尺寸和位置计算,并且可能需要了解容器的特殊状态。 split panes就是这种情况。

创建没有布局 管理 器的容器涉及以下步骤。

  • 通过调用setLayout(null)将容器的布局 管理 器设置为 null。

  • 为容器的每个子级调用Component类的setbounds方法。

  • 调用Component类的repaint方法。

但是,如果调整包含容器的窗口的大小,则使用绝对定位的容器创建容器会引起问题。

这是其内容窗格使用绝对定位的框架的快照。

AbsoluteLayoutDemo 的快照

单击启动按钮以使用Java™Web 开始(下载 JDK 7 或更高版本)运行 AbsoluteLayoutDemo。另外,要自己编译和运行示例,请查阅example index

其代码在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);

...//In the main method:
Insets insets = frame.getInsets();
frame.setSize(300 + insets.left + insets.right,
              125 + insets.top + insets.bottom);