#java #swing #user-interface #jlist
#java #swing #пользовательский интерфейс #jlist
Вопрос:
Я хочу привязать JList в JScrollPane к массиву, всякий раз, когда массив изменяется, список изменяется.
Комментарии:
1. @Ahmed, когда вы нажимаете «Вставить
", you want your queue(
JList» вJScrollPane
?), чтобы добавить элемент,JTextField
будет обновляться для отображения размера очереди?2. Нет, когда я нажимаю insert, я буду отображать содержимое queue на панели. текстовое поле — это еще один ввод
3. @Ahmed, что такое «содержимое» очереди и где их источник? Полагаю, я все еще немного сбит с толку, по крайней мере, изображением. какую роль, если таковая имеется, играет текстовое поле во всем этом?
4. Хм, извините за путаницу. Позвольте мне просто сформулировать это так. У меня есть JList. И у меня есть массив, который обновляется до тех пор, пока выполняется программа. Я хочу создать что-то вроде table.setModel (blabla), но для того, чтобы список обновлялся всякий раз, когда обновляется этот фрейм
5. реальные массивы (
Something[]
) не доступны для прослушивания в Java. Я бы посоветовал вам использоватьList<Something>
реализацию. Вам обязательно следует взглянуть на библиотеку с открытым исходным кодом GlazedLists .
Ответ №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
реализации, которая была бы «подкреплена списком».
Я пробовал оба способа преодолеть это:
- реализовать
List
интерфейс в классе, синхронно обновляющем базовыйDefaultListModel
- расширять
DefaultListModel
, синхронно обновляя базовыйList
экземпляр.
Ни один из способов не сработал.
Поэтому я рискну сказать, что Java SE пока не поддерживает эту функцию. Вы должны закодировать свою собственную реализацию, JList
синхронизированную List
экземпляром, или подождать, пока не появится новый дистрибутив Java, который содержит JList's
или DefaultListModel's
поддерживается List
экземплярами с помощью резервных копий.