2010-06-14 21 views
5

Tôi cần tạo một SuggestBox để hiển thị tất cả các tùy chọn khi nhấn phím Enter. Tôi đã viết bản triển khai sau và có vẻ như là hoạt động tốt. Tôi muốn ai đó xem xét việc triển khai của tôi và cho tôi biết nếu nó sẽ gây ra sự cố trong bất kỳ trường hợp cụ thể nào. Ngoài ra, SuggestOracle được chuyển đến SuggestBox này sẽ có các đề xuất mặc định được đặt, bằng cách gọi phương thức setDefaultSuggestions() trên MultiWordSuggestOracle. Bất kỳ người dùng nào trong số SuggestBox của tôi phải minh bạch với thực tế này. Do đó tôi đoán tôi sẽ cần phải bọc (hoặc mở rộng) MultiWordSuggestOracle để thực hiện cài đặt đề xuất mặc định . Bạn có thể vui lòng giới thiệu những gì sẽ là một cách tốt đẹp của việc này?SuggestBox GWT hiển thị tất cả các tùy chọn trên phím 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); 

Trả lời

5

Điều đó có vẻ khá tốt đối với tôi. Một cách khác là thêm nút để hiển thị tất cả đề xuất. Nút có thể được tạo kiểu để trông giống như một mũi tên hộp thả xuống.

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

Cách tiếp cận đó có thể có vấn đề kể từ khi tập trung vào các đề nghị hộp bị mất khi bạn nhấn vào nút, vì vậy những người kích hoạt xác nhận vv trên mờ, có thể bị quấy rầy bởi hành vi này.

tôi khuyên bạn nên sử dụng lib này được tạo ra cho một ứng dụng khổng lồ thực tế đời sống, rất nhiều trường hợp practicle đã được giải quyết do thông tin phản hồi sau khi sử dụng http://code.google.com/p/advanced-suggest-select-box/

Đối với câu hỏi ban đầu đầu tiên, bạn có thể ghi đè onkeyup() và có làm các công cụ đặc biệt cho trường hợp của bạn và ủy quyền cho super.onKeyUp() cho tất cả các phần còn lại.

Hy vọng nó có thể giúp đỡ, Trân trọng, Zied Hamdi

0

@Vishal Singh,

Không cần phải mở rộng SuggestBox. Mã của bạn hoạt động với SuggestBox cơ bản.

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

     } 
    }); 
Các vấn đề liên quan