为什么需要ListModel对象?

时间:2014-06-21 19:22:23

标签: java swing list user-interface collections

我们假设我们有一个名为JList1的列表。

我们想为它创建一个模型,当然,我们使用ListModel对象。这就是将要做的事情。

DefaultListModel<Integer> numbers = new DefaultListModel<>();
numbers.addElement(1);
numbers.addElement(2);
numbers.addElement(3);

jList2.setModel(numbers);

我的问题是为什么我们使用List Model对象而不是普通的列表或集合。我所知道的唯一原因是setModel()只接受列表模型作为其参数,那么这些决策的原因是什么?

2 个答案:

答案 0 :(得分:2)

如果你看一下DefaultListModel的JavaDoc,你会发现它提供了几种方法来操纵JList中使用简单集合无法实现的项目。

如果使用数组或向量初始化列表,构造函数将隐式创建默认列表模型。默认列表模型是不可变的 - 您无法添加,删除或替换列表中的项目。要创建可以单独更改其项目的列表,请将列表的模型设置为可变列表模型类的实例,例如DefaultListModel的实例。

请查看How to Use Lists上的 Swing教程,详细说明。

答案 1 :(得分:2)

  

我的问题是为什么我们使用List Model对象而不是普通的列表或集合。

Swing遵循MVC(模型 - 视图 - 控制器)设计的变体。

该模型有几个主要职责:

  1. 保存数据
  2. 在数据发生变化时通知View,以便View可以重新绘制自己。
  3. 在内部,您通常会发现Model将使用Collection实现来存储数据。

    您可以在网上搜索有关MVC设计的更多信息。您可能希望从:A Swing Architecture Overview开始,以了解如何在Swing中使用MVC。