0

我正在尝试为 Swing 实现自动完成,JTextField其中可能的自动完成条目集可能很大(10-100K 项)并且检索起来很昂贵,但搜索条目集相当便宜。谁能指出一个好的解决方案,最好是图书馆的形式?我查看了SwingX autocomplete,但它不是为您没有索引访问的情况而设计的。


更新:由于显然不清楚,问题不在于搜索大量条目是昂贵的(不是),而是在这种特殊情况下获取完整的条目集是昂贵且不切实际的。

4

2 回答 2

1

我对Glazed Lists很幸运。这是假设您可以将整个数据集加载到内存中并将其保存在那里。我已经完成了 20K 左右的项目。

于 2013-04-09T18:57:29.553 回答
0

我最终在这个答案中找到了 Samuel Sjöberg 的“ Autocompletion in Swing ”,并在此基础上实现了以下解决方案。

public class MyAutocompleteDocument extends DefaultStyledDocument {

  @Override
  public void insertString ( int offs, String str, AttributeSet a ) throws BadLocationException
  {
    if ( !StringUtils.isBlank( str ) )
    {
        String text = getText( 0, offs ); // Current text up to insert point
        String completion = complete( text + str ); // Full completed string

        if (!StringUtils.isBlank( completion )) { // not "" or null
            String textToInsert = completion.substring( offs );

            // Always overwrite on complete
            int oldLength = getLength();
            remove( offs, oldLength - offs );
            super.insertString( offs, textToInsert, a );

            // Select the auto-completed portion so it's easy to keep typing
            owner.select( offs + str.length(), getLength() );
        } else {
            super.insertString( offs, str, a );
        }
    }
  }

  private String complete(String startsWith) {
      // access service to search for completion
  }
}

不确定它是否适用于所有情况,但它似乎涵盖了我的。

于 2013-04-12T17:43:54.490 回答