如何编写列表数据侦听器
当可变的list的内容更改时,将发生列表数据事件。由于模型(而非组件)会触发这些事件,因此您必须在列表模型中注册列表数据侦听器。如果尚未使用可变列表模型显式创建列表,则列表是不可变的,并且其模型不会触发这些事件。
Note:
Combo box模型还会触发列表数据事件。但是,除非您是创建自定义组合框模型,否则通常不需要了解它们。
下面的示例演示可变列表上的列表数据事件:
Try this:
-
单击启动按钮以使用Java™Web 开始(下载 JDK 7 或更高版本)运行 ListDataEventDemo。另外,要自己编译和运行示例,请查阅example index。
-
Importing 您最喜欢的滑雪胜地的名称,然后点击“添加”按钮。触发了一个
intervalAdded
事件。 -
在列表中选择一些连续的项目,然后单击“删除”按钮。触发了一个
intervalRemoved
事件。 -
选择一项,然后使用箭头按钮在列表中向上或向下移动它。触发了两个
contentsChanged
事件-一个针对移动的项目,另一个针对被移动的项目。
您可以在ListDataEventDemo.java中找到该演示的代码。这是在列表模型上注册列表数据侦听器并实现该侦听器的代码:
//...where member variables are declared...
private DefaultListModel listModel;
...
//Create and populate the list model
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);
}
}
列表数据侦听器 API
ListDataListener
没有相应的适配器类.*
Method | Purpose |
---|---|
intervalAdded(ListDataEvent) | 当一项或多项添加到列表时调用。 |
intervalRemoved(ListDataEvent) | 从列表中删除一项或多项时调用。 |
contentsChanged(ListDataEvent) | 当列表中一项或多项的内容更改时调用。 |
Method | Purpose |
---|---|
Object getSource() | |
(*在 java.util.EventObject *中) | 返回引发事件的对象。 |
int getIndex0() | 返回其值已更改的第一项的索引。 |
int getIndex1() | 返回其值已更改的最后一项的索引。 |
int getType() | 返回事件类型。可能的值为:CONTENTS_CHANGED ,INTERVAL_ADDED 或INTERVAL_REMOVED 。 |
使用列表数据侦听器的示例
下表列出了使用列表数据侦听器的示例。
Example | Where Described | Notes |
---|---|---|
ListDataEventDemo | This section | 报告列表上发生的所有列表数据事件。 |