Привязка Swing JList к массиву

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


person Ahmed    schedule 19.05.2011    source источник
comment
@Ahmed, когда вы нажимаете Insert", you want your queue(JList` в JScrollPane?), чтобы добавить элемент, и JTextField будет обновляться, чтобы отображать размер очереди?   -  person mre    schedule 19.05.2011
comment
Нет, когда я нажимаю «Вставить», я буду отображать содержимое очереди в панели. текстовое поле - это еще один ввод   -  person Ahmed    schedule 19.05.2011
comment
@ Ахмед, каково содержимое очереди и где их источник? Полагаю, я все еще немного запутался, по крайней мере, из-за изображения. какую роль во всем этом играет текстовое поле?   -  person mre    schedule 19.05.2011
comment
Хм, извините за путаницу. Позвольте мне сказать так. У меня есть JList. И у меня есть массив, который обновляется до тех пор, пока идет программа. Я хочу сделать что-то вроде table.setModel(blabla), но чтобы список обновлялся всякий раз, когда этот фрейм обновляется   -  person Ahmed    schedule 19.05.2011
comment
Я полностью изменил вопрос   -  person Ahmed    schedule 19.05.2011
comment
настоящие массивы (Something[]) не прослушиваются в Java. Я бы посоветовал вам использовать реализацию List<Something>. Вам обязательно стоит взглянуть на библиотеку с открытым исходным кодом GlazedLists.   -  person jfpoilpret    schedule 19.05.2011


Ответы (1)


Первой идеей, конечно, было бы использовать один из конструкторов 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), сравните Java SE API.

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

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

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

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

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

person Andreas Krueger    schedule 01.08.2011