Привязка Swing JList к массиву - PullRequest
1 голос
/ 19 мая 2011

Я хочу привязать JList в JScrollPane к массиву всякий раз, когда массив изменяет список.

1 Ответ

1 голос
/ 01 августа 2011

Конечно, первая идея состоит в том, чтобы использовать один из конструкторов JList и надеяться, что компонент JList обновляется синхронно с массивом:

public JList(Object[] listData);
public JList(Vector<?> listData);

Очевидно, это не сработает. Только если вы используете третий конструктор не по умолчанию

public JList(ListModel model);

и использовать реализацию по умолчанию DefaultListModel и обновлять ее элементы напрямую, например,

DefaultListModel model = new DefaultListModel();
...
model.setElementAt(value, 25);

вы получаете динамически обновляемый компонент JList, обновляя DefaultListModel.

Java SE предоставляет «список фиксированного размера, резервное копирование указанного массива» методом java.util.Arrays.asList(T... a), сравните API Java SE .

Однако здесь поддержка Java SE не работает. Не существует реализации ListModel, которая "поддерживается списком".

Я пробовал оба способа преодолеть это:

  1. реализовать интерфейс List в классе, синхронно обновляющем базовый DefaultListModel
  2. extension DefaultListModel, синхронно обновляя базовый List экземпляр.

Ни один из способов не работал.

Поэтому я рискну сказать, что Java SE пока не поддерживает эту функцию . Вы должны написать собственную реализацию JList, синхронизированную с экземпляром List, или подождать, пока не появится новый дистрибутив Java, в котором есть JList's или DefaultListModel's, резервное копирование которого List экземпляров.

...