需要有关验证自动填充功能的帮助

时间:2012-02-23 09:51:12

标签: java swing autocomplete jtextfield jtextcomponent

搜索单行自动完成我在这里和那里找到了代码,最后最终使用了这个代码

public class AutoCompleteDocument extends PlainDocument {

    private final List<String> dictionary = new ArrayList<String>(); 
    private final JTextComponent jTextField;

    public AutoCompleteDocument(JTextComponent field, String[] aDictionary) {
        jTextField = field;
        dictionary.addAll(Arrays.asList(aDictionary));
    }

    @Override
    public void insertString(int offs, String str, AttributeSet a)
            throws BadLocationException {
        super.insertString(offs, str, a);
        String word = autoComplete(getText(0, getLength()));
        if (word != null) {
            super.insertString(offs + str.length(), word, a);
            jTextField.setCaretPosition(offs + str.length());
            jTextField.moveCaretPosition(getLength());
        }
    }

    public String autoComplete(String text) {
        for (Iterator<String> i = dictionary.iterator(); i.hasNext();) {
            String word = i.next();
            if (word.startsWith(text)) {
                return word.substring(text.length());
            }
        }
        return null;
    }  
}

然后我就像

一样使用它
autoCompleteDoc = new AutoCompleteDocument(myTextField,myDictionary);
myTextField.setDocument(autoCompleteDoc);

一切正常。

我的问题如下:

myTextField有一个actionPerformed的监听器,这样当我按下回车键时,它会进行一些处理。

不幸的是我想要的是当文本被“提议”(突出显示)时,当我按下输入它验证命题以便我可以继续输入并且只有当没有提出文本时(没有突出显示)然后当我按下输入时做我的处理。

我只是不知道从哪里开始。 任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

我认为您的Document实施正确方向+1,您必须添加AttributeSetCaret作为参数

请查看AutoComplete JComboBox/JTextField的工作原理