2010-06-14 13 views
5

Potrzebuję utworzyć SuggestBox, który pokaże wszystkie opcje po naciśnięciu klawisza Enter: . Napisałem następujące wdrożenie i wygląda na to, że działa . Chciałbym, aby ktoś przejrzał moją implementację i daj mi znać, jeśli to spowoduje problemy w danym scenariuszu. Ponadto SuggestOracle, który ma zostać przekazany do tego SuggestBox, powinien mieć ustawione domyślne sugestie, wywołując metodę setDefaultSuggestions() w MultiWordSuggestOracle. Każdy użytkownik mojej komórki SuggestBox powinien być niewidoczny dla tego faktu. Dlatego sądzę, że będę musiał owinąć (lub przedłużyć) MultiWordSuggestOracle, aby wykonać domyślne ustawienia sugestii . Czy możesz polecić, co będzie dobrym sposobem na zrobienie tego?SuggestBox GWT pokazujący wszystkie opcje na klawiszu Enter

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

Odpowiedz

5

To wygląda całkiem dobrze dla mnie. Innym sposobem jest dodanie przycisku, aby wyświetlić wszystkie sugestie. Przycisk może wyglądać jak rozwijana strzałka.

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

To podejście może być problematyczne, ponieważ koncentrują się na polu sugerować zostaną utracone po kliknięciu na przycisk, więc ludzie, którzy wyzwalają walidacji itd na rozmycie, może być zakłócony przez tego zachowania.

polecam korzystania z tego lib, który został stworzony dla ogromnej aplikacji prawdziwym życiu, tak wiele practicle sprawy zostały rozwiązane ze względu na informacje zwrotne po użyciu http://code.google.com/p/advanced-suggest-select-box/

Dla pierwszego pierwotnego pytania, można zastąpić onkeyup() i mają rób specjalne rzeczy dla swojej sprawy i deleguj do super.onKeyUp() dla całej reszty.

Nadzieja może pomóc, poważaniem Zied Hamdi

0

@Vishal Singh

Nie ma potrzeby, aby przedłużyć SuggestBox. Twój kod działa z podstawowym SuggestBox.

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

     } 
    }); 
Powiązane problemy