1

我正在尝试将 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);

提前致谢。

4

4 回答 4

7

包含“帮助”构造函数是为了更容易使用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));
于 2013-06-21T02:02:34.560 回答
3

JList没有接受 a 的构造函数List。第一个示例使用构造函数JList(Object[]) 起作用

熟悉javadoc

于 2013-06-21T01:44:30.043 回答
2

因为JList没有接受ArrayList(或List)的构造函数。它只能接受数组、 aListModel或 a Vector。请参阅文档

AnArrayList不是数组。您不能将 an 传递ArrayList给需要数组的方法。

于 2013-06-21T01:44:40.937 回答
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.
于 2013-06-21T01:44:43.843 回答