在Java中实现自动完成

时间:2013-02-12 18:03:02

标签: java search autocomplete

enter image description here

我正在使用Weather Underground在Java中创建天气应用程序,我发现它确实有一些城市的数据。

最初,我计划使用GeopIP自动获取用户的位置,但由于对城市的支持有限,我决定让用户在每次程序启动时选择城市。

我希望用户能够从Weather Underground支持的城市中选择一个城市。用户将输入名称,当他/她输入名称时,可能的位置将以与图片中所示类似的方式显示。

我的问题是:

  • 如何实施此搜索功能?
  • 我最初的猜测是创建一个包含所有城市名称的Vector,然后使用强力来查找匹配并显示在JPopupJWindow containing a JList中,但我猜必须有一个更好的方法

    改述:

    我不明白 WHAT INFO 我必须保留在必须使用的数据结构中吗?我应该手动创建Weather Underground支持的城市列表,还是有其他方法可以实现?

    2 个答案:

    答案 0 :(得分:3)

    查看Trie数据结构(也称为数字树或前缀树)。自动完成是其有用性最常见的例子之一。

    以下文章有一个非常平易近人的解释:

    Roll your own autocomplete solution using Tries.

    答案 1 :(得分:1)

    如果你谷歌autosuggestcombobox,你会得到一些有趣的结果:

    This一个用JavaFX编写 - 我已经使用并扩展了它。这非常有用。使用JavaFX“免费”获得的内容:一个右键单击的上下文菜单,它是自动生成的,包含一些常用的“东西”,如剪切,复制和放大。粘贴甚至撤消!所以,我可以推荐这个解决方案。进入JavaFX并不是那么难 - 我认为它比Swing更容易学习 - 看起来更酷!然而,这种实现有一些缺点 - 特别是当布局没有左对齐时,因为它只是组合框顶部的文本字段。

    好的 - 但如果你想坚持Swing - 你可以使用this one。我自己没有使用它,但代码看起来非常简单和干净 - 比我必须承认的JavaFX的实现更清晰(但它有一些很好的功能)。所以 - 也许你尝试 - 并扩展它?它仅在JComboBox上构建。