是否可以使DefaultListModel使用LinkedList的内容来显示?
然后将其与JList一起使用。
答案 0 :(得分:4)
是的,有可能:您只需要继承AbstractListModel
并覆盖getElementAt
和getSize
来调用您的基础LinkedList
。
public class MyListModel extends AbstractListModel {
private final List<?> l;
public MyListModel(List<?> l) {
this.l = l;
}
public Object getElementAt(int index) {
return l.get(index);
}
public int getSize() {
return l.size();
}
}
警告:在实施ListModel
或TableModel
并使用List
支持模型时,我建议使用ArrayList
而不是LinkedList
在访问给定元素时确保O(1)访问时间。
答案 1 :(得分:2)
DefaultListModel
使用Vector
作为支持列表。这是一个私有成员,因此您实际上没有选项扩展和覆盖它的工作方式。如果你必须使用LinkedList
,你可能必须编写自己的列表模型实现(比如,扩展AbstractListModel
作为默认列表模型),或者遍历列表并添加每个对象到列表模型。
答案 2 :(得分:0)
除非您将其子类化并覆盖所有已实现的方法,否则不行。但是你可以将LinkedList中的所有元素添加到DefaultListModel(填充底层的Vector)
for (Object element : linkedList)
model.addElement(element);
或者使用LinkedList / List / Collection作为源代码编写自己的AbstractListModel实现。