2011-04-25 75 views
0

我有一个文本框和一个suggestbox。我在文本框中附加了一个值更改和键处理程序,这样用户键入(或粘贴)到文本框中的任何内容都会在提示框中回显。我可以通过调用showSuggestionList对每个值更改和键入事件来获取提示框以显示建议列表。GWT SuggestBox:如何强制SuggestBox选择的建议列表中的第一项?

现在,我怎么了suggestbox自动选择的建议列表中的第一项?

一个我试过的方法就是以编程方式模拟按键,即

suggestBox.setFocus(true); 
NativeEvent enterEvent = Document.get().createKeyPressEvent(false, false, false, false, KeyCodes.KEY_ENTER); 
DomEvent.fireNativeEvent(enterEvent, suggestBox); 
textBox.setFocus(true); 

这并不在所有的工作。回车键不被模拟。另一种可能的解决方案是扩展SuggestionBox.SuggestionDisplay,但我不太确定如何做到这一点。任何指针赞赏。

更新:我还在就这个问题和尝试各种方法。

在这里,我尝试通过继承DefaultSuggestionDisplay和覆盖getCurrentSelection()使我的类可访问来实现我自己的SuggestionDisplay。这也不起作用。返回空值。

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。

suggestBox.addValueChangeHandler(new ValueChangeHandler<String>() { 

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

回答

4

使用suggesBox.setAutoSelectEnabled(true)

Here关于GWT的SuggestBox更多信息:

+0

setAutoSelectEnabled默认为true。它的作用是当用户在提示框中键入并按下回车键时,第一项被选中。如果设置为false,则按Enter键时不会发生任何事情。 – 2011-04-25 09:28:56

0

您可以尝试与setAutoSelectEnabled结合使用addSelectionHandler只要选择一个建议来接收事件。你也可以有你的Oracle发送邮件时,它意味着什么,或者你的显示器发送消息时,它会显示一个列表:

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

您好,感谢您的输入,但我不知道如何实现fireValueChangeEventWithFirstSuggestion(建议)方法。你能详细说明吗?正如您所提到的,另一种方法是通过建议框内的值更改处理程序触发选择事件。我也尝试这种方法,但无济于事。 – 2011-04-27 11:02:41