Creating a TextField for integer only input when not using a data source

A TextField is a component that always has a value of type String. By adding a converter to a field, the field will automatically validate that the entered value can be converted and it will provide the converted value using the getConvertedValue() method.

final TextField textField = new TextField("Text field");
textField.setConverter(Integer.class);

Button submitButton = new Button("Submit value", new ClickListener() {
  public void buttonClick(ClickEvent event) {
    String uiValue = textField.getValue();
    try {
      Integer convertedValue = (Integer) textField
          .getConvertedValue();
      Notification.show(
          "UI value (String): " + uiValue
          + "<br />Converted value (Integer): "
          + convertedValue);
    } catch (ConversionException e) {
      Notification.show(
          "Could not convert value: " + uiValue);
    }
  }
});

addComponent(new Label("Text field type: " + textField.getType()));
addComponent(new Label("Converted text field type: "
    + textField.getConverter().getModelType()));
addComponent(textField);
addComponent(submitButton);

With this example, entering a number and pressing the button causes the value of the TextField to be a String while the converted value will be an Integer representing the same value. If e.g. a letter is entered to the field and the button is pressed, the validation will fail. This causes a notice to be displayed for the field and an exception to be thrown from getConvertedValue().