# 如何使用标签

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

使用 [`JLabel`](https://docs.oracle.com/javase/8/docs/api/javax/swing/JLabel.html) 类，可以显示不可选择的文本和图像。如果需要创建显示字符串，图像或两者的组件，可以使用或扩展`JLabel`。如果组件是交互式且具有特定状态，请使用[按钮](button.html)而不是标签。

通过在标签的文本中指定 HTML 代码，您可以为标签指定各种特征，例如多行，多种字体或多种颜色。如果标签仅使用单一颜色或字体，则可以使用`setForeground`或`setFont`方法来避免 HTML 处理的开销。有关详细信息，请参阅[在 Swing 组件](html.html)中使用 HTML。

请注意，默认情况下标签不是不透明的。如果需要绘制标签的背景，建议您将其不透明度属性设置为“true”。以下代码段显示了如何执行此操作。

```
label.setOpaque(true);

```

下图介绍了一个显示三个标签的应用程序。窗口分为三排相等的高度;每行中的标签尽可能宽。

<center>![A snapshot of LabelDemo, which uses labels with text and icons.](img/dd78495f649dca956bf097892d93d98a.jpg)</center>

* * *

**Try this:** 

1.  单击“启动”按钮以使用 [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)）运行 Label Demo。或者，要自己编译并运行示例，请参考[示例索引](../examples/components/index.html#LabelDemo)。 [![Launches the LabelDemo Application](img/4707a69a17729d71c56b2bdbbb4cc61c.jpg)](https://docs.oracle.com/javase/tutorialJWS/samples/uiswing/LabelDemoProject/LabelDemo.jnlp) 

2.  调整窗口大小，以便您可以看到标签的内容如何放置在标签的绘图区域内。
    所有标签内容都有默认的垂直对齐方式 - 也就是说，标签内容在标签的绘图区域中垂直居中。顶部标签包含图像和文本，具有水平中心对齐。第二个标签（仅包含文本）已经离开（前导）对齐，这是从左到右语言的纯文本标签的默认设置。第三个标签仅包含图像，具有水平中心对齐，这是仅图像标签的默认设置。

* * *

以下是 [`LabelDemo.java`](../examples/components/LabelDemoProject/src/components/LabelDemo.java) 中的代码，它在前一个示例中创建了标签。

```
ImageIcon icon = createImageIcon("images/middle.gif");
. . .
label1 = new JLabel("Image and Text",
                    icon,
                    JLabel.CENTER);
//Set the position of the text, relative to the icon:
label1.setVerticalTextPosition(JLabel.BOTTOM);
label1.setHorizontalTextPosition(JLabel.CENTER);

label2 = new JLabel("Text-Only Label");
label3 = new JLabel(icon);

```

`createImageIcon`方法的代码与本教程中使用的代码类似。您可以在[如何使用图标](../components/icon.html)中找到它。

通常，标签描述另一个组件。发生这种情况时，您可以使用`setLabelFor`方法识别标签描述的组件，从而提高程序的可访问性。例如：

```
amountLabel.setLabelFor(amountField);

```

上述代码取自[如何使用格式化文本字段](formattedtextfield.html)中讨论的`FormattedTextFieldDemo`示例，让辅助技术知道标签（`amountLabel`）提供有关格式化文本字段的信息（`amountField`） 。有关辅助技术的更多信息，请参阅[如何支持辅助技术](../misc/access.html)。

下表列出了常用的`JLabel`构造函数和方法。您可能调用的其他方法由`Component`和`JComponent`类定义。它们包括`setFont`，`setForeground`，`setBorder`，`setOpaque`和`setBackground`。有关详细信息，请参见 [JComponent 类](jcomponent.html)。使用标签的 API 分为三类：

*   [设置或获取标签内容](#contentsapi)
*   [微调标签的外观](#looksapi)
*   [支持辅助功能](#accessapi)

* * *

**Note:** 

在以下 API 中，不要将标签对齐与 X 和 Y 对齐混淆。布局管理器使用 X 和 Y 对齐方式，可以影响任何组件（不仅仅是标签）的大小或位置。另一方面，标签对齐对标签的大小或位置没有影响。标签对齐只是确定标签的绘画区域内标签内容的位置。通常，标签的绘画区域正好是在标签上绘制所需的大小，因此标签对齐是无关紧要的。有关 X 和 Y 对齐的更多信息，请参阅[如何使用 BoxLayout](../layout/box.html) 。

* * *

<caption></caption>
| 方法或构造函数 | 目的 |
| --- | --- |
| [JLabel（Icon）](https://docs.oracle.com/javase/8/docs/api/javax/swing/JLabel.html#JLabel-javax.swing.Icon-)
[JLabel（Icon，int）](https://docs.oracle.com/javase/8/docs/api/javax/swing/JLabel.html#JLabel-javax.swing.Icon-int-)
[JLabel（String）](https://docs.oracle.com/javase/8/docs/api/javax/swing/JLabel.html#JLabel-java.lang.String-)
[JLabel（String，Icon， int）](https://docs.oracle.com/javase/8/docs/api/javax/swing/JLabel.html#JLabel-java.lang.String-javax.swing.Icon-int-)
[JLabel（String，int）](https://docs.oracle.com/javase/8/docs/api/javax/swing/JLabel.html#JLabel-java.lang.String-int-)
[JLabel（）](https://docs.oracle.com/javase/8/docs/api/javax/swing/JLabel.html#JLabel--) | 创建`JLabel`实例，将其初始化为具有指定的 text / image / alignment。 `int`参数指定标签内容在其绘图区域内的水平对齐方式。水平对齐必须是 [`SwingConstants`](https://docs.oracle.com/javase/8/docs/api/javax/swing/SwingConstants.html) 接口（`JLabel`实现）中定义的以下常量之一：`LEFT`，`CENTER`，`RIGHT`，`LEADING`或`TRAILING`。为了便于本地化，我们强烈建议使用`LEADING`和`TRAILING`，而不是`LEFT`和`RIGHT`。 |
| [void setText（String）](https://docs.oracle.com/javase/8/docs/api/javax/swing/JLabel.html#setText-java.lang.String-)
[String getText（）](https://docs.oracle.com/javase/8/docs/api/javax/swing/JLabel.html#getText--) | 设置或获取标签显示的文本。您可以使用 HTML 标记格式化文本，如[在 Swing 组件中使用 HTML](html.html) 中所述。 |
| [void setIcon（Icon）](https://docs.oracle.com/javase/8/docs/api/javax/swing/JLabel.html#setIcon-javax.swing.Icon-)
[Icon getIcon（）](https://docs.oracle.com/javase/8/docs/api/javax/swing/JLabel.html#getIcon--) | 设置或获取标签显示的图像。 |
| [void setDisplayedMnemonic（char）](https://docs.oracle.com/javase/8/docs/api/javax/swing/JLabel.html#setDisplayedMnemonic-char-)
[char getDisplayedMnemonic（）](https://docs.oracle.com/javase/8/docs/api/javax/swing/JLabel.html#getDisplayedMnemonic--) | 设置或获取看起来像键盘替代的字母。当标签描述具有键盘替代但无法显示它的组件（例如文本字段）时，这很有用。如果还设置了 labelFor 属性（使用`setLabelFor`），则当用户激活助记符时，键盘焦点将转移到 labelFor 属性指定的组件。 |
| [void setDisplayedMnemonicIndex（int）](https://docs.oracle.com/javase/8/docs/api/javax/swing/JLabel.html#setDisplayedMnemonicIndex-int-)
[int getDisplayedMnemonicIndex（）](https://docs.oracle.com/javase/8/docs/api/javax/swing/JLabel.html#getDisplayedMnemonicIndex--) | 设置或获取有关文本中哪个字符应装饰以表示助记符的提示。当您有两个相同字符的实例并希望装饰第二个实例时，这很有用。例如，`setDisplayedMnemonicIndex(5)`修饰位置 5 处的字符（即文本中的第 6 个字符）。并非所有类型的外观都支持此功能。 |
| [void setDisabledIcon（Icon）](https://docs.oracle.com/javase/8/docs/api/javax/swing/JLabel.html#setDisabledIcon-javax.swing.Icon-)
[Icon getDisabledIcon（）](https://docs.oracle.com/javase/8/docs/api/javax/swing/JLabel.html#getDisabledIcon--) | 禁用时，设置或获取标签显示的图像。如果未指定禁用的图像，则外观会通过操作默认图像来创建一个。 |

<caption></caption>
| 方法 | 目的 |
| --- | --- |
| [void setHorizo​​ntalAlignment（int）](https://docs.oracle.com/javase/8/docs/api/javax/swing/JLabel.html#setHorizontalAlignment-int-)
[void setVerticalAlignment（int）](https://docs.oracle.com/javase/8/docs/api/javax/swing/JLabel.html#setVerticalAlignment-int-)
[int getHorizo​​ntalAlignment（）](https://docs.oracle.com/javase/8/docs/api/javax/swing/JLabel.html#getHorizontalAlignment--)
[int getVerticalAlignment（）](https://docs.oracle.com/javase/8/docs/api/javax/swing/JLabel.html#getVerticalAlignment--) | 设置或获取标签上应放置其内容的区域。 [`SwingConstants`](https://docs.oracle.com/javase/8/docs/api/javax/swing/SwingConstants.html) 接口为水平对齐定义了五个可能的值：`LEFT`，`CENTER`（仅图像标签的默认值），`RIGHT`，`LEADING`（仅限文本的默认值）标签），`TRAILING`。对于垂直对齐：`TOP`，`CENTER`（默认值）和`BOTTOM`。 |
| [void setHorizo​​ntalTextPosition（int）](https://docs.oracle.com/javase/8/docs/api/javax/swing/JLabel.html#setHorizontalTextPosition-int-)
[void setVerticalTextPosition（int）](https://docs.oracle.com/javase/8/docs/api/javax/swing/JLabel.html#setVerticalTextPosition-int-)
[int getHorizo​​ntalTextPosition（）](https://docs.oracle.com/javase/8/docs/api/javax/swing/JLabel.html#getHorizontalTextPosition--)
[int getVerticalTextPosition（）](https://docs.oracle.com/javase/8/docs/api/javax/swing/JLabel.html#getVerticalTextPosition--) | 设置或获取标签文本相对于标签图像的放置位置。 [`SwingConstants`](https://docs.oracle.com/javase/8/docs/api/javax/swing/SwingConstants.html) 接口定义了水平位置的五个可能值：`LEADING`，`LEFT`，`CENTER`，`RIGHT`和`TRAILING`（默认值）。对于垂直位置：`TOP`，`CENTER`（默认值）和`BOTTOM`。 |
| [void setIconTextGap（int）](https://docs.oracle.com/javase/8/docs/api/javax/swing/JLabel.html#setIconTextGap-int-)
[int getIconTextGap（）](https://docs.oracle.com/javase/8/docs/api/javax/swing/JLabel.html#getIconTextGap--) | 设置或获取标签文本与其图像之间的像素数。 |

<caption></caption>
| 方法 | 目的 |
| --- | --- |
| [void setLabelFor（Component）](https://docs.oracle.com/javase/8/docs/api/javax/swing/JLabel.html#setLabelFor-java.awt.Component-)
[组件 getLabelFor（）](https://docs.oracle.com/javase/8/docs/api/javax/swing/JLabel.html#getLabelFor--) | 设置或获取标签描述的组件。 |

下表列出了许多使用标签的示例。

| 例 | 在哪里描述 | 笔记 |
| :-- | :-- | :-- |
| [`LabelDemo`](../examples/components/index.html#LabelDemo) | 这个部分 | 显示如何指定水平和垂直对齐以及如何对齐标签的文本和图像。 |
| [`HtmlDemo`](../examples/components/index.html#HtmlDemo) | [在 Swing 组件中使用 HTML](html.html) | 让您体验为标签指定 HTML 文本。 |
| [`BoxAlignmentDemo`](../examples/layout/index.html#BoxAlignmentDemo) | [修复对齐问题](../layout/box.html#alignment) | 在垂直框布局中使用标签时，可能会出现对齐问题。显示如何解决问题。 |
| [`DialogDemo`](../examples/components/index.html#DialogDemo) | [如何使用对话框](dialog.html) | 使用可更改的标签显示说明并提供反馈。 |
| [`SplitPaneDemo`](../examples/components/index.html#SplitPaneDemo) | [如何使用拆分窗格](splitpane.html)和[如何使用列表](list.html) | 使用滚动窗格内的标签显示图像。 |
| [`SliderDemo2`](../examples/components/index.html#SliderDemo2) | [如何使用滑块](slider.html) | 使用`JLabel`为滑块提供标签。 |
| [`TableDialogEditDemo`](../examples/components/index.html#TableDialogEditDemo) | [如何使用表格](table.html) | 实现标签子类`ColorRenderer`，以显示表格单元格中的颜色。 |
| [`FormattedTextFieldDemo`](../examples/components/index.html#FormattedTextFieldDemo) | [如何使用格式化文本字段](formattedtextfield.html) | 有四行，每行包含一个标签和它描述的格式化文本字段。 |
| [`TextComponentDemo`](../examples/components/index.html#TextComponentDemo) | [文本组件功能](generaltext.html) | `TextComponentDemo`有一个内部类（`CaretListenerLabel`），它扩展`JLabel`以提供一个标签来监听事件，并根据事件自行更新。 |
| [`ColorChooserDemo`](../examples/components/index.html#ColorChooserDemo) | [如何使用颜色选择器](colorchooser.html) | 使用不透明标签在固定颜色背景下显示当前选择的颜色。 |

请参阅[使用 JavaFX UI 控件：标签](https://docs.oracle.com/javase/8/javafx/user-interface-tutorial/label.htm)教程以了解 JavaFX 标签控件。