我正在尝试将ArrayList添加到Jlist,但我理解的唯一方法就是编写这样的代码:
ArrayList<String> labels = new ArrayList<String>();
JList jlist = new JList(labels.toArray());
令我困惑的是,为什么我不能像这样直接将ArrayList添加到Jlist:
ArrayList<String> labels = new ArrayList<String>();
JList jlist = new JList(labels);
提前感谢。
答案 0 :(得分:7)
包含“helper”构造函数是为了更容易使用简单数据结构的JList
。
JList
(和许多Swing组件)实际上是用于向视图提供实际数据的模型。
原始设计在Swing被整合到主库(JDK 1.3之前)之前和引入集合API之前就已经过时了,因此原始开发人员可能没有List
可用他们(因此包含Vector
)。
可能没有人认为可以更新库(因为可能已经确定原来的构造函数不应该被包括在内,但我没有参加那次会议;)
更好/更简单的解决方案是创建自己的模型,使用List
作为数据源。
例如......
public class MyListModel<T> extends AbstractListModel<T> {
private List<T> people;
public MyListModel(List<T> 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<MyObject>(listOfMyObjets));
答案 1 :(得分:3)
JList
没有接受List
的构造函数。第一个示例使用构造函数JList(Object[])。
熟悉javadoc
答案 2 :(得分:2)
因为JList
没有接受ArrayList
(或List
)的构造函数。它只能接受数组,ListModel
或Vector
。请参阅the documentation。
ArrayList
不是数组。您无法将ArrayList
传递给想要数组的方法。
答案 3 :(得分:2)
这很简单。 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<E> 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.