为什么我不能直接将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 )的构造函数。 它只能接受数组, ListModelVector 。 请参阅文档 。

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 listData) Constructs a JList that displays the elements in the specified Vector.