获取DefaultListModel以使用LinkedList

时间:2010-02-02 11:35:26

标签: java swing

是否可以使DefaultListModel使用LinkedList的内容来显示?

然后将其与JList一起使用。

3 个答案:

答案 0 :(得分:4)

是的,有可能:您只需要继承AbstractListModel并覆盖getElementAtgetSize来调用您的基础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();
  }
}

警告:在实施ListModelTableModel并使用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实现。