本教程是针对JDK 8编写的。本页中描述的示例和实践未利用后续版本中引入的改进,并且可能使用不再可用的技术。
有关Java SE 9及后续版本中更新的语言特性的摘要,请参阅Java语言变化。
有关所有JDK版本的新功能、增强功能以及已删除或弃用选项的信息,请参阅JDK发行说明。
当可变的列表的内容发生改变时,会发生列表数据事件。由于是模型而不是组件触发这些事件,所以你需要在列表模型中注册一个列表数据监听器。如果你没有显式地创建一个带有可变列表模型的列表,则你的列表是不可变的,它的模型不会触发这些事件。
下面的示例演示了可变列表上的列表数据事件:
intervalAdded事件。intervalRemoved事件。contentsChanged事件——一个是移动的项目,一个是被替代的项目。你可以在ListDataEventDemo.java中找到演示代码。以下是在列表模型上注册列表数据监听器并实现该监听器的代码:
//...在这里声明成员变量...
private DefaultListModel listModel;
...
//创建并填充列表模型
listModel = new DefaultListModel();
...
listModel.addListDataListener(new MyListDataListener());
class MyListDataListener implements ListDataListener {
public void contentsChanged(ListDataEvent e) {
log.append("contentsChanged: " + e.getIndex0() +
", " + e.getIndex1() + newline);
}
public void intervalAdded(ListDataEvent e) {
log.append("intervalAdded: " + e.getIndex0() +
", " + e.getIndex1() + newline);
}
public void intervalRemoved(ListDataEvent e) {
log.append("intervalRemoved: " + e.getIndex0() +
", " + e.getIndex1() + newline);
}
}
ListDataListener没有对应的适配器类。
| 方法 | 目的 |
|---|---|
| intervalAdded(ListDataEvent) | 当一个或多个项目添加到列表中时调用。 |
| intervalRemoved(ListDataEvent) | 当一个或多个项目从列表中删除时调用。 |
| contentsChanged(ListDataEvent) | 当列表中一个或多个项目的内容发生变化时调用。 |
| 方法 | 目的 |
|---|---|
| Object getSource() (在 java.util.EventObject中) |
返回触发事件的对象。 |
| int getIndex0() | 返回第一个值发生变化的项目的索引。 |
| int getIndex1() | 返回最后一个值发生变化的项目的索引。 |
| int getType() | 返回事件类型。可能的值有:CONTENTS_CHANGED、INTERVAL_ADDED或INTERVAL_REMOVED。 |
下表列出了使用列表数据监听器的示例。
| 示例 | 描述位置 | 备注 |
|---|---|---|
ListDataEventDemo |
本节 | 报告列表上发生的所有列表数据事件。 |