Получить DefaultListModel для использования LinkedList - PullRequest
2 голосов
/ 02 февраля 2010

Можно ли заставить DefaultListModel использовать содержимое LinkedList для отображения?

Затем его следует использовать с JList.

Ответы [ 3 ]

4 голосов
/ 02 февраля 2010

Да, это возможно: вам просто нужно создать подкласс 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) время доступа при доступе данный элемент.

2 голосов
/ 02 февраля 2010

DefaultListModel использует Vector в качестве вспомогательного списка. Это закрытый член, поэтому у вас нет возможности расширить и переопределить его работу. Если вам нужно использовать LinkedList, вам, вероятно, придется написать собственную реализацию модели списка (скажем, расширить AbstractListModel, как это делает модель списка по умолчанию), или пройтись по списку и добавить каждый объект в модель списка .

0 голосов
/ 02 февраля 2010

Если вы не наследуете его и не переопределите все реализованные методы, нет. но вы можете добавить все элементы из LinkedList в DefaultListModel (заполняя базовый вектор)

for (Object element : linkedList)
    model.addElement(element);

или просто напишите свою собственную реализацию AbstractListModel, используя в качестве источника LinkedList / List / Collection.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...