Обновить JList в JFrame - PullRequest
       5

Обновить JList в JFrame

20 голосов
/ 24 ноября 2010

У меня есть JList, который отображает информацию из вектора. Затем пользователь может добавлять и удалять информацию из этого вектора. Можно ли обновить JList внутри моего JFrame, когда элементы добавляются / удаляются из вектора? В настоящее время я делаю ..

 list = new JList(names);
 jframe.add(new JScrollPane(list), BorderLayout.CENTER);

но это не обновляет JList к чему-то новому. Я проверил и мое векторное содержимое и т. Д. Меняются, но список не обновляется. Зачем? как я могу это исправить?

Ответы [ 4 ]

28 голосов
/ 24 ноября 2010

Вы не должны обновлять Вектор.Изменения должны быть сделаны непосредственно в ListModel, тогда таблица будет перерисовываться автоматически.

Если вы решите воссоздать ListModel из-за изменений в векторе, то вы обновите список, выполнив:

list.setModel( theNewModel );

Редактировать: забыть вектор и загрузить данные непосредственно в DefaultListModel:

DefaultListModel model = new DefaultListModel();
model.addElement( "one" );
model.addElement( "two" );
JList list = new JList( model );

Теперь, когда вам нужно изменить данные, вы обновляете модель напрямую, используя addElement (), removeElement () илиметоды set ().Список будет автоматически перекрашен.

4 голосов
/ 18 июня 2018

Позвоните updateUI в Jlist после изменения вектора.

1 голос
/ 09 января 2017

Мне кажется, я нашел решение для графического «обновления» Jlist.Попробуйте вызывать этот метод после каждого добавления или удаления элемента модели, который содержится в Jlist.

Jlist_name.ensureIndexIsVisible (model_name.getSize ());

0 голосов
/ 28 января 2019

вы можете использовать list.setListData (vector) каждый раз, когда вектор меняется

...