首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GWT SuggestBox:如何强制SuggestBox选择建议列表中的第一项?

GWT SuggestBox:如何强制SuggestBox选择建议列表中的第一项?
EN

Stack Overflow用户
提问于 2011-04-25 16:29:47
回答 2查看 6.4K关注 0票数 1

我有一个文本框和一个建议框。我将一个值更改和键控处理程序附加到文本框中,这样用户在文本框中键入(或粘贴)的任何内容都会在suggestbox中回显。我可以让suggestbox在每个值更改和key up事件中调用showSuggestionList来显示建议列表。

现在,如何让suggestbox自动选择建议列表中的第一项?

我尝试过的一种方法是编程模拟按键,即

代码语言:javascript
复制
suggestBox.setFocus(true);
NativeEvent enterEvent = Document.get().createKeyPressEvent(false, false, false,   false, KeyCodes.KEY_ENTER);
DomEvent.fireNativeEvent(enterEvent, suggestBox);
textBox.setFocus(true);

这根本不起作用。未模拟enter键。另一个可能的解决方案是扩展SuggestionBox.SuggestionDisplay,但我不太确定如何做到这一点。感谢您的指点。

更新:我仍在做这件事,并尝试各种方法。

在这里,我尝试实现我自己的SuggestionDisplay,方法是继承DefaultSuggestionDisplay并覆盖getCurrentSelection()以使其可以从我的类中访问。这也不起作用。返回Null。

代码语言:javascript
复制
    private class CustomSuggestionDisplay extends DefaultSuggestionDisplay {
    @Override
    protected Suggestion getCurrentSelection() {
        return super.getCurrentSelection();
    }
}

    suggestBox.setAutoSelectEnabled(true);

    textBox.addKeyUpHandler(new KeyUpHandler() {

        public void onKeyUp(KeyUpEvent event) {
            suggestBox.setValue(textBox.getText(), true);
            suggestBox.showSuggestionList();
            if (suggestBox.isSuggestionListShowing()) {
                String s = ((CustomSuggestionDisplay) suggestBox.getSuggestionDisplay()).getCurrentSelection().getDisplayString();
                Window.alert(s);
            }
        }
    });

在这里,我尝试将值更改处理程序附加到SuggestBox,并将事件类型强制转换为SuggestOracle.Suggestion。同样,返回null。

代码语言:javascript
复制
suggestBox.addValueChangeHandler(new ValueChangeHandler<String>() {

        public void onValueChange(ValueChangeEvent<String> event) {
            String s = ((SuggestOracle.Suggestion) event).getDisplayString();
            Window.alert(s);
        }
    });
EN

回答 2

Stack Overflow用户

发布于 2011-04-25 17:12:27

使用suggesBox.setAutoSelectEnabled(true)

Here更多关于GWT的SuggestBox的信息:

票数 5
EN

Stack Overflow用户

发布于 2011-04-25 21:38:56

您可以尝试将addSelectionHandler与setAutoSelectEnabled结合使用,以便在选择建议时接收事件。您还可以让Oracle在它提出建议时发送一条消息,或者让您的显示器在显示列表时发送一条消息:

代码语言:javascript
复制
public class AutomaticallySelectingSuggestionDisplay extends SuggestBox.DefaultSuggestionDisplay {
    @Override
    protected void showSuggestions(SuggestBox box, Collection<? extends SuggestOracle.Suggestion> suggestions, boolean isDisplayHtml, boolean isAutoSelectEnabled, SuggestBox.SuggestionCallback callback) {
        super.showSuggestions(box, suggestions, isDisplayHtml, isAutoSelectEnabled, callback);
        fireValueChangeEventWithFirstSuggestion(suggestions);
    }
}

这个想法对我来说有点混乱,所以我希望你能找到一个只使用事件处理程序的解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5776615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档