Автозаполнение с GlazedLists
Я использую glazedlists для автозаполнения, но я хочу спросить кое-что в этом пункте. У меня есть arraylist для списка друзей. Люди могут быть добавлены в список друзей или удалены из списка друзей, нажав кнопку добавить или удалить. Данные списка друзей записываются в friend.txt и читаются из friend.txt с использованием Gson и Json. Когда пользователь добавляет человека в список или удаляет человека из списка, выбранный человек удаляется или добавляется в friend.txt.
...
Object[] elements = new Object[holdSizeValue];
for( int i = 0 ; i < holdSizeValue ; i++ ){
elements[i] = sendFriendNameFromList(i);
}
searchBox = new JComboBox<Object>();
final EventList<Object> eventList = GlazedLists.eventList(Arrays.asList(elements));
SwingUtilities.invokeAndWait(new Runnable() {
@Override
public void run() {
AutoCompleteSupport.install(searchBox, eventList);
}
});
...
Как вы можете понять из кода, я использовал glazedlist для операции поиска. Я хочу обновить элементы []. Как я могу обновить? Когда я вызываю метод, который включает в себя код выше, из контроллера кнопки "добавить" или "удалить", я получаю исключение о invokeAndWait.
1 ответ
Основным преимуществом EventList является то, что после его инициализации вы просто добавляете в него объекты и все, что наблюдает за этими данными, например, ComboBox волшебным образом обновляется благодаря всем предоставляемым GlazedLists сантехническим средствам.
Итак, переместите EventList
быть переменной экземпляра:
private EventList<Object> eventList = new BasicList<Object>();
Выполните AutoCompleteSupport один раз, после searchBox
был создан и настроен.
Затем, когда вам нужно добавить элементы, позвоните eventList.addAll(...)
, Не создавайте заново этот список и не устанавливайте searchBox каждый раз, когда вы хотите выполнить обновление. Добавить / удалить со списком событий, а остальные будут следовать автоматически.