# 如何编写项目监听器

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

项目事件由实现 [`ItemSelectable`](https://docs.oracle.com/javase/8/docs/api/java/awt/ItemSelectable.html) 接口的组件触发。通常，`ItemSelectable`组件保持一个或多个项目的开/关状态。触发项目事件的 Swing 组件包括[复选框](../components/button.html#checkbox)，[检查菜单项](../components/menu.html)，[切换按钮](../components/button.html)等按钮，以及[组合框](../components/combobox.html) 。

以下是 [`ComponentEventDemo.java`](../examples/events/ComponentEventDemoProject/src/events/ComponentEventDemo.java) 中的一些项目事件处理代码：

```
//where initialization occurs
checkbox.addItemListener(this);
...
public void itemStateChanged(ItemEvent e) {
    if (e.getStateChange() == ItemEvent.SELECTED) {
        label.setVisible(true);
        ...
    } else {
        label.setVisible(false);
    }
}

```

_ 因为`ItemListener`只有一个方法，所以它没有相应的适配器类。_

| 方法 | 目的 |
| :-- | :-- |
| [itemStateChanged（ItemEvent）](https://docs.oracle.com/javase/8/docs/api/java/awt/event/ItemListener.html#itemStateChanged-java.awt.event.ItemEvent-) | 在收听组件的状态更改之后调用。 |

| 方法 | 目的 |
| :-- | :-- |
| [Object getItem（）](https://docs.oracle.com/javase/8/docs/api/java/awt/event/ItemEvent.html#getItem--) | 返回与状态更改的项关联的特定于组件的对象。通常这是包含所选项目上的文本的`String`。 |
| [ItemSelectable getItemSelectable（）](https://docs.oracle.com/javase/8/docs/api/java/awt/event/ItemEvent.html#getItemSelectable--) | 返回触发 item 事件的组件。您可以使用它而不是`getSource`方法。 |
| [int getStateChange（）](https://docs.oracle.com/javase/8/docs/api/java/awt/event/ItemEvent.html#getStateChange--) | 返回项的新状态。 `ItemEvent`类定义了两种状态：`SELECTED`和`DESELECTED`。 |

下表列出了一些使用项侦听器的示例。

| 例 | 在哪里描述 | 笔记 |
| :-- | :-- | :-- |
| [`ComponentEventDemo`](../examples/events/index.html#ComponentEventDemo) | 本节和[如何编写组件监听器](componentlistener.html) | 在复选框上侦听项目事件，该复选框确定标签是否可见。 |
| [`CheckBoxDemo`](../examples/components/index.html#CheckBoxDemo) | [如何使用复选框](../components/button.html#checkbox) | 四个复选框共享一个项目侦听器，它使用`getItemSelected`来确定触发事件的复选框。 |
| [`MenuDemo`](../examples/components/index.html#MenuDemo) | [如何使用菜单](../components/menu.html) | 在复选框菜单项上侦听项目事件。 |
| [`MenuDemo`](../examples/components/index.html#ScrollDemo) | [如何使用滚动窗格](../components/scrollpane.html) | 在切换按钮上收听项目事件。 |