加载时自动完成文本字段触发选择事件

Autocomplete text field firing selection event on load

看起来 AutoCompleteTextField 正在加载时触发建议选择事件。我用 ListModel 对此进行了测试。您可以使用准系统 hello world 项目中的以下代码重现此问题。

    public void start() {
    if (current != null) {
        current.show();
        return;
    }
    Form hi = new Form("Hi World");

    ListModel<String> suggestionsModel = new DefaultListModel<String>();
    suggestionsModel.addItem("Apple");
    suggestionsModel.addItem("Banana");
    suggestionsModel.addItem("Chocolate");
    suggestionsModel.addItem("Elk");
    suggestionsModel.addItem("Fish");
    AutoCompleteTextField search = new AutoCompleteTextField(suggestionsModel);

    suggestionsModel.addSelectionListener(new SelectionListener() {
        @Override
        public void selectionChanged(int oldSelected, int newSelected) {
            System.out.println("SUGGESTION SELECTED"+suggestionsModel.getSelectedIndex());
        }
    });
    hi.add(search);

    hi.show();
}

如果您 运行 代码,您可以看到 "SUGGESTION SELECTED0" 被打印两次,确认选择在加载时触发并默认选择第一个建议。

这给我带来了麻烦。我正在搜索一个对象,如果找到了,我会向用户显示它的属性。根据这个问题,第一个对象的属性在加载时默认显示。

这是 "over eager" 数据更改侦听器的行为,我们不会更改它,因为有一些边缘情况依赖于此行为(例如粘贴、即时编辑类型等)。

使用这个非常简单:

if(currentValue != lasValue) {
 ....
}