如何编写列表数据监听器

原文: https://docs.oracle.com/javase/tutorial/uiswing/events/listdatalistener.html

当可变列表的内容发生变化时,会发生列表数据事件。由于模型 - 而不是组件 - 触发这些事件,您必须使用列表模型注册列表数据监听器。如果您没有显式创建具有可变列表模型的列表,那么您的列表是不可变的,并且其模型不会触发这些事件。


Note:

组合框模型也列出了火灾列表数据事件。但是,除非您创建自定义组合框模型,否则通常不需要了解它们。


以下示例演示了可变列表中的列表数据事件:

An output of the ListDataEventDemo which demonstrates list data events.


Try this:

  1. 单击“启动”按钮以使用 Java™Web Start下载 JDK 7 或更高版本)运行 ListDataEventDemo。或者,要自己编译并运行示例,请参考示例索引Launches the ListDataEventDemo example

  2. 输入您最喜爱的滑雪胜地的名称,然后单击添加按钮。发生intervalAdded事件。

  3. 在列表中选择一些连续项目,然后单击删除按钮。发生intervalRemoved事件。
  4. 选择一个项目,然后使用箭头按钮在列表中向上或向下移动它。触发了两个contentsChanged事件 - 一个用于移动的项目,另一个用于移位的项目。

您可以在 ListDataEventDemo.java 中找到演示代码。以下是在列表模型上注册列表数据监听器并实现监听器的代码:

  1. //...where member variables are declared...
  2. private DefaultListModel listModel;
  3. ...
  4. //Create and populate the list model
  5. listModel = new DefaultListModel();
  6. ...
  7. listModel.addListDataListener(new MyListDataListener());
  8. class MyListDataListener implements ListDataListener {
  9. public void contentsChanged(ListDataEvent e) {
  10. log.append("contentsChanged: " + e.getIndex0() +
  11. ", " + e.getIndex1() + newline);
  12. }
  13. public void intervalAdded(ListDataEvent e) {
  14. log.append("intervalAdded: " + e.getIndex0() +
  15. ", " + e.getIndex1() + newline);
  16. }
  17. public void intervalRemoved(ListDataEvent e) {
  18. log.append("intervalRemoved: " + e.getIndex0() +
  19. ", " + e.getIndex1() + newline);
  20. }
  21. }

ListDataListener没有相应的适配器类。

方法 目的
intervalAdded(ListDataEvent) 在将一个或多个项目添加到列表时调用。
intervalRemoved(ListDataEvent) 从列表中删除一个或多个项目时调用。
contentsChanged(ListDataEvent) 当列表中的一个或多个项目的内容发生更改时调用。
方法 目的
对象 getSource()

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

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

在哪里描述 笔记
ListDataEventDemo 这个部分 报告列表中发生的所有列表数据事件。