为什么我不能直接将ArrayList添加到Jlist?
我试图将ArrayList添加到Jlist,但我理解的唯一方法是编写如下代码:
ArrayList labels = new ArrayList(); JList jlist = new JList(labels.toArray());
令我困惑的是,为什么我不能像这样直接将ArrayList添加到Jlist:
ArrayList labels = new ArrayList(); JList jlist = new JList(labels);
提前致谢。
包含“辅助”构造函数意味着使用简单的数据结构更容易使用JList
。
JList
(和许多Swing组件)实际上意味着与向视图提供实际数据的模型一起使用。
最初的设计在Swing被整合到主库(JDK 1.3之前)之前和引入集合API之前就已经过时了,因此原始开发人员可能没有可用的List
(因此包含了Vector
)。
从那以后,很可能没有人认为适合更新库(部分原因是可能已经确定原始构造函数不应该被包括在内,但我没有参加那次会议;))
更好/更简单的解决方案是创建自己的模型,使用List
作为数据源。
例如…
public class MyListModel extends AbstractListModel { private List people; public MyListModel(List people) { this.people = people; } @Override public int getSize() { return people.size(); } @Override public T getElementAt(int index) { return people.get(index); } }
然后,您可以在需要时将其提供给JList
…
JList myList = new JList(new MyListModel(listOfMyObjets));
JList
没有接受List
构造函数。 第一个示例使用构造函数JList(Object []) 。
熟悉javadoc
因为JList
没有接受ArrayList
(或List
)的构造函数。 它只能接受数组, ListModel
或Vector
。 请参阅文档 。
ArrayList
不是数组。 您不能将ArrayList
传递给想要数组的方法。
这很简单。 JList构造函数不期望ArrayList
JList() Constructs a JList with an empty, read-only, model. JList(E[] listData) Constructs a JList that displays the elements in the specified array. JList(ListModel dataModel) Constructs a JList that displays elements from the specified, non-null, model. JList(Vector extends E> listData) Constructs a JList that displays the elements in the specified Vector.