SuggestBox GWT显示Enter键上的所有选项

时间:2010-06-14 17:33:49

标签: gwt

我需要创建一个SuggestBox,它会在按下时显示所有选项 Enter键。 我写了以下实现,似乎是 工作正常。 我希望有人审查我的实施,如果有,请告诉我 会在任何特定情况下引起问题。 另外,要传递给这个SuggestBox的SuggestOracle应该有 通过调用方法设置默认建议 MultiWordSuggestOracle上的setDefaultSuggestions()。我的任何用户 SuggestBox对这个事实应该是透明的。因此,我想我会的 需要包装(或扩展)MultiWordSuggestOracle来执行默认操作 建议设置。能否请你推荐一个好方法 这样做?

public class SuggestBoxWithAllOptions extends SuggestBox implements 
    KeyPressHandler { 
    public SuggestBoxWithAllOptions(MultiWordSuggestOracle oracle) { 
            super(oracle); 
            this.addKeyPressHandler(this); 
    } 
    @Override 
    public void onKeyPress(KeyPressEvent event) { 
            char c = event.getCharCode(); 
            int i = this.getText().length(); 
    if (c == KeyboardListener.KEY_ENTER && i == 0) { 
            /* Since the query string is null, the default suggestions 
           will get listed */ 
            this.showSuggestionList(); 
     } 
    } 
   } 

  /* Code for initializing the SuggestBox */ 
            List<String> suggestions = new ArrayList<String>(); 
            suggestions.add("Tablet"); 
            suggestions.add("Capsule"); 
            MultiWordSuggestOracle myOracle = new MultiWordSuggestOracle(); 
            myOracle.addAll(suggestions ); 
            myOracle.setDefaultSuggestionsFromText(suggestions); 
            SuggestBox mySuggest = new SuggestBoxWithAllOptions(myOracle); 

3 个答案:

答案 0 :(得分:5)

这看起来对我很好。另一种方法是添加一个按钮来显示所有建议。该按钮的样式可以看起来像一个下拉框箭头。

public class DropDownSuggestBox extends Composite {

public DropDownSuggestBox(final SuggestBox suggestBox) {
    FlowPanel layout = new FlowPanel();
    final Button dropDownButton = new Button();
    dropDownButton.setStyleName("slate-DropdownIcon");
    dropDownButton.setText("Show Options");
    dropDownButton.addClickHandler(new ClickHandler() {
        @Override
        public void onClick(ClickEvent event) {
            suggestBox.setFocus(true);
            suggestBox.showSuggestionList();
        }
    });

    layout.add(suggestBox);
    layout.add(dropDownButton);

    initWidget(layout);

    setStylePrimaryName("slate-DropDownSuggestBox");
}

}

答案 1 :(得分:2)

这种方法可能会出现问题,因为当您点击按钮时,对建议框的关注会丢失,因此在模糊时触发验证等的人可能会受到这种行为的干扰。

我建议使用这个为真实的大型应用程序创建的lib,因为使用后的反馈很多实例 http://code.google.com/p/advanced-suggest-select-box/

对于第一个原始问题,您可以覆盖onkeyUp()并为您的案例执行特殊操作,并将其委托给super.onKeyUp()。

希望它可以提供帮助, 最好的祝福, Zied Hamdi

答案 2 :(得分:0)

@Vishal Singh,

无需扩展SuggestBox。 您的代码使用基本的SuggestBox。

    SuggestBox mySuggest = new SuggestBox(myOracle);
    mySuggest.addKeyPressHandler(new KeyPressHandler() {
        @Override
        public void onKeyPress(KeyPressEvent event) {

        }
    });