# 如何使用 FlowLayout

> 原文： [https://docs.oracle.com/javase/tutorial/uiswing/layout/flow.html](https://docs.oracle.com/javase/tutorial/uiswing/layout/flow.html)

* * *

**Note:** This lesson covers writing layout code by hand, which can be challenging. If you are not interested in learning all the details of layout management, you might prefer to use the `GroupLayout` layout manager combined with a builder tool to lay out your GUI. One such builder tool is the [NetBeans IDE](../learn/index.html). Otherwise, if you want to code by hand and do not want to use `GroupLayout`, then `GridBagLayout` is recommended as the next most flexible and powerful layout manager.

* * *

如果您对使用 JavaFX 创建 GUI 感兴趣，请参阅[在 JavaFX](https://docs.oracle.com/javase/8/javafx/layout-tutorial/index.html) 中使用布局。

[`FlowLayout`](https://docs.oracle.com/javase/8/docs/api/java/awt/FlowLayout.html) 类提供了一个非常简单的布局管理器，默认情况下由`JPanel`对象使用。下图表示使用流布局的应用程序的快照：

<center>![A snapshot of FlowLayoutDemo](img/73e94a575150a0b87ac77b5f9a9c0c76.jpg)</center>

单击“启动”按钮以使用 [Java™Web Start](http://www.oracle.com/technetwork/java/javase/javawebstart/index.html) （[下载 JDK 7 或更高版本](http://www.oracle.com/technetwork/java/javase/downloads/index.html)）运行 FlowLayoutDemo。或者，要自己编译并运行示例，请参考[示例索引](../examples/layout/index.html#FlowLayoutDemo)。

[![Launches the FlowLayoutDemo application](img/4707a69a17729d71c56b2bdbbb4cc61c.jpg)](https://docs.oracle.com/javase/tutorialJWS/samples/uiswing/FlowLayoutDemoProject/FlowLayoutDemo.jnlp)

该演示的完整代码位于 [`FlowLayoutDemo.java`](../examples/layout/FlowLayoutDemoProject/src/layout/FlowLayoutDemo.java) 文件中。

`FlowLayout`类将组件放在一行中，大小按其首选大小排列。如果容器中的水平空间太小而无法将所有组件放在一行中，则`FlowLayout`类将使用多行。如果容器比一行组件所需的宽，则默认情况下，该行在容器内水平居中。要指定该行要向左或向右对齐，请使用带有对齐参数的`FlowLayout`构造函数。 `FlowLayout`类的另一个构造函数指定在组件周围放置多少垂直或水平填充。

下面的代码片段创建了一个`FlowLayout`对象及其管理的组件。

```
FlowLayout experimentLayout = new FlowLayout();

...

    compsToExperiment.setLayout(experimentLayout);

    compsToExperiment.add(new JButton("Button 1"));
    compsToExperiment.add(new JButton("Button 2"));
    compsToExperiment.add(new JButton("Button 3"));
    compsToExperiment.add(new JButton("Long-Named Button 4"));
    compsToExperiment.add(new JButton("5"));

```

选择“从左到右”或“从右到左”选项，然后单击“应用方向”按钮以设置组件的方向。以下代码段将“从左到右”组件方向应用于`experimentLayout`。

```
        compsToExperiment.setComponentOrientation(
                ComponentOrientation.LEFT_TO_RIGHT);

```

下表列出了`FlowLayout`类的构造函数。

| 构造函数 | 目的 |
| --- | --- |
| [`FlowLayout()`](https://docs.oracle.com/javase/8/docs/api/java/awt/FlowLayout.html#FlowLayout--) | 构造一个新的`FlowLayout`对象，其中心对齐以及水平和垂直间隙，默认大小为 5 像素。 |
| [`FlowLayout（int _align_ ）`](https://docs.oracle.com/javase/8/docs/api/java/awt/FlowLayout.html#FlowLayout-int-) | 创建一个新的流布局管理器，其中包含指示的对齐方式以及水平和垂直间隙，默认大小为 5 像素。对齐参数可以是`FlowLayout.LEADING`，`FlowLayout.CENTER`或`FlowLayout.TRAILING`。当`FlowLayout`对象控制具有从左到右组件方向（默认值）的容器时，`LEADING`值指定要左对齐的组件，`TRAILING`值指定要右对齐的组件。 |
| [`FlowLayout（int _align_ ，int _hgap_ ，int _vgap_ ）`](https://docs.oracle.com/javase/8/docs/api/java/awt/FlowLayout.html#FlowLayout-int-int-int-) | 创建一个新的流布局管理器，其中包含指示的对齐方式以及指示的水平和垂直间隙。 `hgap`和`vgap`参数指定组件之间放置的像素数。 |

##  的示例

下表列出了使用`FlowLayout`类并提供相关部分链接的代码示例。

| 例 | 在哪里描述 | 笔记 |
| :-- | :-- | :-- |
| [`FlowLayoutDemo`](../examples/layout/index.html#FlowLayoutDemo) | 这一页 | 设置内容窗格以使用`FlowLayout`。如果将`RIGHT_TO_LEFT`常量设置为`true`并重新编译，则可以看到`FlowLayout`如何处理从右到左的组件方向的容器。 |
| [`CardLayoutDemo`](../examples/layout/index.html#CardLayoutDemo) | [如何使用 CardLayout](card.html) | 将组件很好地集中在`BorderLayout`的顶部，并将组件放在使用`FlowLayout`的`JPanel`中。 |
| [`ButtonDemo`](../examples/components/index.html#ButtonDemo) | [如何使用按钮，复选框和单选按钮](../components/button.html) | 使用`JPanel`的默认`FlowLayout`。 |
| [`TextInputDemo`](../examples/components/index.html#TextInputDemo) | [如何使用格式化文本字段](../components/formattedtextfield.html) | 使用带有右对齐`FlowLayout`的面板，显示两个按钮。 |