SuggestBox GWT, показывающий все опции на клавише Enter - PullRequest
5 голосов
/ 14 июня 2010

Мне нужно создать SuggestBox, которое будет показывать все опции при нажатии клавиши Enter.Я написал следующую реализацию, и, кажется, работает нормально.Я хотел бы, чтобы кто-то проверил мою реализацию и дал мне знать, если это вызовет проблемы в каком-либо конкретном сценарии.Кроме того, для SuggestOracle, передаваемого в этот SuggestBox, должен быть установлен набор предложений по умолчанию путем вызова метода setDefaultSuggestions () для MultiWordSuggestOracle.Любой пользователь моего 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 ]

5 голосов
/ 15 февраля 2011

Это выглядит довольно хорошо для меня.Другой способ - добавить кнопку, чтобы показать все предложения.Кнопка может быть оформлена в виде стрелки раскрывающегося списка.

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");
}

}
2 голосов
/ 17 мая 2011

Такой подход может быть проблематичным, так как при нажатии на кнопку фокус на поле подсказки теряется, поэтому люди, которые запускают проверку и т. Д. При размытии, могут быть обеспокоены этим поведением.эта библиотека была создана для реального огромного приложения, поэтому многие практические случаи были решены благодаря обратной связи после использованияспециальный материал для вашего случая и делегируйте super.onKeyUp () для всех остальных.

Надеюсь, что это может помочь, С уважением, Зиед Хамди

0 голосов
/ 06 августа 2015

@ Вишал Сингх,

Нет необходимости расширять SuggestBox.Ваш код работает с основным SuggestBox.

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

        }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...