Dar una mascara a un TextField

Hola a todos, requiero dar una mascara a un campo de un formulario ej.(##)(_________), pero la libreria MaskedTextField no tiene soporte sobre vaadin 7, alguien sabe como se podría solucionar esto, gracias.

Nunca he necesitado enmascarar un campo, por lo tanto no sabría decirte como hacerlo. Sin embargo Vaadin 7 incluye convertidores para los campos, algo que puede ayudarte para este caso.

En
https://vaadin.com/forum#!/thread/2583480/2621700
hace tiempo puse un ejemplo que convierte de
BigDecimal
a
String
y viceversa. Para ser precisos, era un campo moneda usando punto (.) para separar deciamles y coma (,) para separar miles.

Tu caso tal vez pueda ser resuelto usando expresiones regulares dentro del convertidor, un ejemplo del convertidor si buscas que el usuario use una secuencia de 10 digitos seria este:


public class MyConverter implements Converter<String, String> {

    // Buscas tener exactamente una secuencia de 10 dígitos del 0 al 9
    @Override
    public String convertToModel(String value, Locale locale) throws ConversionException {
        if (value == null) {
            return null;
        }

        //Quitamos espacios en blanco.
        value = value.trim();

        //Si es una serie de numeros, esto sera "true"
        boolean onlyNumbers = value.matches("[0-9]
+");

        // Cadena de ejemplo cuando hay letras
        if (!onlyNumbers) {
            return "9876543210";
        }

        // Si no hay 10 digitos, llenamos con ceros
        if (value.length() < 10) {
            int padding = 10 - value.length();
            StringBuilder sb = new StringBuilder(10);
            sb.append(value);
            for (int i = 0; i < padding; i++) {
                sb.append("0");
            }
            return sb.toString();
        }

        // 10 digitos o mas, recortamos
        return value.substring(0, 10);
    }

    // La cadena en tu modelo (digamos, JavaBean) no necesita conversión.
    @Override
    public String convertToPresentation(String value, Locale locale) throws ConversionException {
        return value;
    }

    @Override
    public Class<String> getModelType() {
        return String.class;
    }

    @Override
    public Class<String> getPresentationType() {
        return String.class;
    }
}

Aplicas el convertidor al campo usando algo similar a esto:


AbstractField af = (AbstractField) groupFieldInstance.getField("campo");
af.setConverter(new MyConverter());

Espero que te sea de ayuda.