Автозаполнение с 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 каждый раз, когда вы хотите выполнить обновление. Добавить / удалить со списком событий, а остальные будут следовать автоматически.

Другие вопросы по тегам