加载时自动完成文本字段触发选择事件
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) {
....
}
看起来 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) {
....
}