Class AutoCompleteTextField

All Implemented Interfaces:
Animation, Editable, ActionSource, StyleListener, TextHolder

public class AutoCompleteTextField extends TextField

An editable com.codename1.ui.TextField with completion suggestions that show up in a drop down menu while the user types in text.

This class uses the "TextField" UIID by default as well as "AutoCompletePopup" & "AutoCompleteList" for the popup list details.

The sample below shows the more trivial use case for this widget:

Form hi = new Form("Auto Complete", new BoxLayout(BoxLayout.Y_AXIS));
AutoCompleteTextField ac = new AutoCompleteTextField("Short", "Shock", "Sholder", "Shrek");
ac.setMinimumElementsShownInPopup(5);
hi.add(ac);

The following sample shows more dynamic usage of the class where the auto-complete model is mutated based on webservice results.

public void showForm() {
  final DefaultListModel options = new DefaultListModel<>();
  AutoCompleteTextField ac = new AutoCompleteTextField(options) {
@Override
      protected boolean filter(String text) {
          if(text.length() == 0) {
              return false;
          }
          String[] l = searchLocations(text);
          if(l == null || l.length == 0) {
              return false;
          }

          options.removeAll();
          for(String s : l) {
              options.addItem(s);
          }
          return true;
      }

  };
  ac.setMinimumElementsShownInPopup(5);
  hi.add(ac);
  hi.add(new SpanLabel("This demo requires a valid google API key to be set below "
           + "you can get this key for the webservice (not the native key) by following the instructions here: "
           + "https://developers.google.com/places/web-service/get-api-key"));
  hi.add(apiKey);
  hi.getToolbar().addCommandToRightBar("Get Key", null, e -> Display.getInstance().execute("https://developers.google.com/places/web-service/get-api-key"));
  hi.show();
}

TextField apiKey = new TextField();

String[] searchLocations(String text) {
    try {
        if(text.length() > 0) {
            ConnectionRequest r = new ConnectionRequest();
            r.setPost(false);
            r.setUrl("https://maps.googleapis.com/maps/api/place/autocomplete/json");
            r.addArgument("key", apiKey.getText());
            r.addArgument("input", text);
            NetworkManager.getInstance().addToQueueAndWait(r);
            Map result = new JSONParser().parseJSON(new InputStreamReader(new ByteArrayInputStream(r.getResponseData()), "UTF-8"));
            String[] res = Result.fromContent(result).getAsStringArray("//description");
            return res;
        }
    } catch(Exception err) {
        Log.e(err);
    }
    return null;
}
  • Field Details

  • Constructor Details

    • AutoCompleteTextField

      public AutoCompleteTextField(String... completion)

      Constructor with completion suggestions

      Parameters
      • completion: a String array of suggestion for completion
    • AutoCompleteTextField

      public AutoCompleteTextField(ListModel<String> listModel)

      Constructor with completion suggestions, filtering is automatic in this case

      Parameters
      • listModel: a list model containing potential string suggestions
    • AutoCompleteTextField

      public AutoCompleteTextField()
      The default constructor is useful for cases of filter subclasses overriding the getSuggestionModel value as well as for the GUI builder
  • Method Details

    • initComponent

      protected void initComponent()
      Allows subclasses to bind functionality that relies on fully initialized and "ready for action" component state
      Overrides:
      initComponent in class TextArea
    • deinitialize

      protected void deinitialize()
      Invoked to indicate that the component initialization is being reversed since the component was detached from the container hierarchy. This allows the component to deregister animators and cleanup after itself. This method is the opposite of the initComponent() method.
      Overrides:
      deinitialize in class TextField
    • showPopup

      public void showPopup()
      Causes the popup UI to show
    • setText

      public void setText(String text)

      Sets the text within this text area

      Parameters
      • t: new value for the text area
      Specified by:
      setText in interface TextHolder
      Overrides:
      setText in class TextField
    • updateFilterList

      protected void updateFilterList()
      In a case of an asynchronous filter this method can be invoked to refresh the completion list
    • filter

      protected boolean filter(String text)

      Subclasses can override this method to perform more elaborate filter operations

      Parameters
      • text: the text to filter
      Returns

      true if the filter has changed the list, false if it hasn't or is working asynchronously

    • getSuggestionModel

      protected ListModel<String> getSuggestionModel()

      Returns the list model to show within the completion list

      Returns

      the list model can be anything

    • setCompletionRenderer

      public void setCompletionRenderer(ListCellRenderer completionRenderer)

      Sets a custom renderer to the completion suggestions list.

      Parameters
      • completionRenderer: a ListCellRenderer for the suggestions List
    • keyPressed

      public void keyPressed(int k)

      If this Component is focused, the key pressed event will call this method

      Parameters
      • keyCode: the key code value to indicate a physical key.
      Overrides:
      keyPressed in class TextField
    • keyReleased

      public void keyReleased(int k)

      If this Component is focused, the key released event will call this method

      Parameters
      • keyCode: the key code value to indicate a physical key.
      Overrides:
      keyReleased in class TextField
    • addListListener

      public void addListListener(ActionListener a)

      Adds an action listener that fires an event when an entry in the auto-complete list is selected. Notice that this method will only take effect when the popup is reshown, if it is invoked when a popup is already showing it will have no effect.

      Parameters
      • a: the listener
    • removeListListener

      public void removeListListener(ActionListener a)

      Removes an action listener that fires an event when an entry in the auto-complete list is selected. Notice that this method will only take effect when the popup is reshown, if it is invoked when a popup is already showing it will have no effect.

      Parameters
      • a: the listener
    • getMinimumLength

      public int getMinimumLength()

      Indicates the minimum length of text in the field in order for a popup to show the default is 0 where a popup is shown immediately for all text length if the number is 2 a popup will only appear when there are two characters or more.

      Returns

      the minimumLength

    • setMinimumLength

      public void setMinimumLength(int minimumLength)

      Indicates the minimum length of text in the field in order for a popup to show the default is 0 where a popup is shown immediately for all text length if the number is 2 a popup will only appear when there are two characters or more.

      Parameters
      • minimumLength: the minimumLength to set
    • getMinimumElementsShownInPopup

      public int getMinimumElementsShownInPopup()

      The number of elements shown for the auto complete popup

      Returns

      the minimumElementsShownInPopup

    • setMinimumElementsShownInPopup

      public void setMinimumElementsShownInPopup(int minimumElementsShownInPopup)

      The number of elements shown for the auto complete popup

      Parameters
      • minimumElementsShownInPopup: the minimumElementsShownInPopup to set
    • setPopupPosition

      public void setPopupPosition(int popupPosition)

      Set the autocomplete popup position in respect of the text field; POPUP_POSITION_AUTO is the default and it means that the popup is placed according to the available space.

      Parameters
      • popupPosition: @param popupPosition on of POPUP_POSITION_AUTO, POPUP_POSITION_OVER, POPUP_POSITION_UNDER
    • shouldShowPopup

      protected boolean shouldShowPopup()

      Callback that allows subclasses to block the popup from showing

      Returns

      true to allow the popup if applicable, false to block it

    • getPropertyNames

      public String[] getPropertyNames()

      A component may expose mutable property names for a UI designer to manipulate, this API is designed for usage internally by the GUI builder code

      Returns

      the property names allowing mutation

      Overrides:
      getPropertyNames in class Component
    • getPropertyTypes

      public Class[] getPropertyTypes()

      Matches the property names method (see that method for further details).

      Returns

      the types of the properties

      Overrides:
      getPropertyTypes in class Component
    • getPropertyTypeNames

      public String[] getPropertyTypeNames()

      This method is here to workaround an XMLVM array type bug where property types aren't identified properly, it returns the names of the types using the following type names: String,int,double,long,byte,short,char,String[],String[][],byte[],Image,Image[],Object[],ListModel,ListCellRenderer

      Returns

      Array of type names

      Overrides:
      getPropertyTypeNames in class Component
    • getPropertyValue

      public Object getPropertyValue(String name)

      Returns the current value of the property name, this method is used by the GUI builder

      Parameters
      • name: the name of the property
      Returns

      the value of said property

      Overrides:
      getPropertyValue in class Component
    • getCompletion

      public String[] getCompletion()

      Returns the completion values

      Returns

      array of completion entries

    • setCompletion

      public void setCompletion(String... completion)

      Sets the completion values

      Parameters
      • completion: the completion values
    • setPropertyValue

      public String setPropertyValue(String name, Object value)

      Sets a new value to the given property, returns an error message if failed and null if successful. Notice that some builtin properties such as "$designMode" might be sent to components to indicate application state.

      Parameters
      • name: the name of the property

      • value: new value for the property

      Returns

      error message or null

      Overrides:
      setPropertyValue in class Component
    • isStartsWithMode

      public boolean isStartsWithMode()

      When enabled this makes the filter check that the string starts with rather than within the index

      Returns

      the startsWithMode

    • setStartsWithMode

      public void setStartsWithMode(boolean startsWithMode)

      When enabled this makes the filter check that the string starts with rather than within the index

      Parameters
      • startsWithMode: the startsWithMode to set