如何编写列表数据侦听器

当可变的list的内容更改时,将发生列表数据事件。由于模型(而非组件)会触发这些事件,因此您必须在列表模型中注册列表数据侦听器。如果尚未使用可变列表模型显式创建列表,则列表是不可变的,并且其模型不会触发这些事件。

Note:

Combo box模型还会触发列表数据事件。但是,除非您是创建自定义组合框模型,否则通常不需要了解它们。

下面的示例演示可变列表上的列表数据事件:

ListDataEventDemo 的输出,用于演示列表数据事件。

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 interface

  • ListDataListener没有相应的适配器类.*
MethodPurpose
intervalAdded(ListDataEvent)当一项或多项添加到列表时调用。
intervalRemoved(ListDataEvent)从列表中删除一项或多项时调用。
contentsChanged(ListDataEvent)当列表中一项或多项的内容更改时调用。

ListDataEvent API

MethodPurpose
Object getSource()

(*在java.util.EventObject *中)
返回引发事件的对象。
int getIndex0()返回其值已更改的第一项的索引。
int getIndex1()返回其值已更改的最后一项的索引。
int getType()返回事件类型。可能的值为:CONTENTS_CHANGEDINTERVAL_ADDEDINTERVAL_REMOVED

使用列表数据侦听器的示例

下表列出了使用列表数据侦听器的示例。

ExampleWhere DescribedNotes
ListDataEventDemoThis section报告列表上发生的所有列表数据事件。