文档

Java™ 教程
隐藏目录
如何编写List Data监听器
路径: 使用Swing创建GUI
教程: 编写事件监听器
章节: 实现常见事件的监听器

如何编写列表数据监听器

当可变的列表的内容发生改变时,会发生列表数据事件。由于是模型而不是组件触发这些事件,所以你需要在列表模型中注册一个列表数据监听器。如果你没有显式地创建一个带有可变列表模型的列表,则你的列表是不可变的,它的模型不会触发这些事件。


注意: 

组合框模型也会触发列表数据事件。然而,除非你正在创建自定义组合框模型,否则通常不需要知道这些事件。


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

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

试试看: 
  1. 点击“Launch”按钮以使用Java™ Web Start运行ListDataEventDemo(下载JDK 7或更高版本)。或者,如果要自行编译和运行示例,请参阅示例索引启动ListDataEventDemo示例
  2. 键入您喜欢的滑雪胜地的名称,然后点击Add按钮。将触发intervalAdded事件。
  3. 选择列表中的几个连续项目,然后点击Delete按钮。将触发intervalRemoved事件。
  4. 选择一个项目,并使用箭头按钮将其上移或下移。将触发两个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);
    }
} 

List Data Listener API

ListDataListener接口

ListDataListener没有对应的适配器类。

方法 目的
intervalAdded(ListDataEvent) 当一个或多个项目添加到列表中时调用。
intervalRemoved(ListDataEvent) 当一个或多个项目从列表中删除时调用。
contentsChanged(ListDataEvent) 当列表中一个或多个项目的内容发生变化时调用。

ListDataEvent API

方法 目的
Object getSource()
(java.util.EventObject中)
返回触发事件的对象。
int getIndex0() 返回第一个值发生变化的项目的索引。
int getIndex1() 返回最后一个值发生变化的项目的索引。
int getType() 返回事件类型。可能的值有:CONTENTS_CHANGEDINTERVAL_ADDEDINTERVAL_REMOVED

使用List Data Listeners的示例

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

示例 描述位置 备注
ListDataEventDemo 本节 报告列表上发生的所有列表数据事件。

上一页: 如何编写键盘监听器
下一页: 如何编写列表选择监听器