496.md 2.9 KB
Newer Older
W
init  
wizardforcel 已提交
1 2 3 4 5 6 7 8
# 如何编写项目监听器

> 原文: [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) 中的一些项目事件处理代码:

W
wizardforcel 已提交
9
```java
W
init  
wizardforcel 已提交
10 11 12 13 14 15 16 17 18 19 20 21 22 23
//where initialization occurs
checkbox.addItemListener(this);
...
public void itemStateChanged(ItemEvent e) {
    if (e.getStateChange() == ItemEvent.SELECTED) {
        label.setVisible(true);
        ...
    } else {
        label.setVisible(false);
    }
}

```

W
wizardforcel 已提交
24
*因为`ItemListener`只有一个方法,所以它没有相应的适配器类。*
W
init  
wizardforcel 已提交
25 26 27 28 29 30 31 32 33 34 35

| 方法 | 目的 |
| :-- | :-- |
| [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`。 |

W
wizardforcel 已提交
36
下表列出了一些使用项监听器的示例。
W
init  
wizardforcel 已提交
37 38 39 40

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