可以让DefaultListModel使用LinkedList的内容来显示吗?
然后将其与JList一起使用。
发布于 2010-02-02 19:42:54
是的,这是可能的:您只需将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)访问时间。
发布于 2010-02-02 19:44:10
DefaultListModel使用Vector作为支持列表。这是一个私有成员,因此您实际上没有选项扩展和覆盖它的工作方式。如果必须使用LinkedList,则可能必须编写自己的列表模型实现(例如,像默认列表模型那样扩展AbstractListModel ),或者遍历列表并将每个对象添加到列表模型中。
发布于 2010-02-02 19:44:07
除非您将其子类化并覆盖所有实现的方法,否则不会。但是您可以将LinkedList中的所有元素添加到DefaultListModel中(填充基础向量)
for (Object element : linkedList)
model.addElement(element);或者使用LinkedList/List/Collection作为源来编写您自己的AbstractListModel实现。
https://stackoverflow.com/questions/2183669
复制相似问题