使用GlazedLists自动完成

时间:2013-03-04 20:43:36

标签: autocomplete glazedlists invokeandwait

我正在使用glazedlists进行自动完成,但我想在这一点上问一些问题。我有一个朋友列表的arraylist。可以将人员添加到好友列表,也可以通过单击“添加”或“删除”按钮将其从好友列表中删除。 friendlist的数据写入friend.txt,并通过使用Gson和Json从friend.txt中读取。 当用户将某人添加到列表或从列表中删除某人时,所选人员将从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 个答案:

答案 0 :(得分:0)

EventList的主要优点是,一旦初始化,您只需向其添加对象以及观察该数据的所有内容,例如,由于GlazedLists提供的所有管道,ComboBox将神奇地更新。

因此,将EventList移动为实例变量:

private EventList<Object> eventList = new BasicList<Object>();

在创建并设置searchBox后执行一次AutoCompleteSupport。

然后,当您需要添加项目时,请致电eventList.addAll(...)。不要重新复制该列表,也不要在每次要进行更新时重新安装searchBox。使用事件列表添加/删除,其余部分将自动跟随。