为什么我不能直接将ArrayList添加到Jlist?

Ryz*_*off 1 java swing arraylist jlist

我正在尝试将ArrayList添加到Jlist,但我理解的唯一方法是编写如下代码:

ArrayList<String> labels = new ArrayList<String>();
JList jlist = new JList(labels.toArray());
Run Code Online (Sandbox Code Playgroud)

令我困惑的是,为什么我不能像这样直接将ArrayList添加到Jlist:

ArrayList<String> labels = new ArrayList<String>();
JList jlist = new JList(labels);
Run Code Online (Sandbox Code Playgroud)

提前致谢.

Mad*_*mer 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以简单地将它提供给JList你需要的时间......

JList myList = new JList(new MyListModel<MyObject>(listOfMyObjets));
Run Code Online (Sandbox Code Playgroud)