Manera recomendada para restringir la entrada en el campo de texto JavaFX

Puede parecer que la pregunta es el duplicado deesta. Pero mi pregunta es que he desarrollado un campo de texto entero en JavaFX de dos maneras. El código se da a continuación.

public class FXNDigitsField extends TextField
{
private long m_digit;
public FXNDigitsField()
{
    super();
}
public FXNDigitsField(long number)
{
    super();
    this.m_digit = number;
    onInitialization();
}

private void onInitialization()
{
    setText(Long.toString(this.m_digit));
}

@Override
public void replaceText(int startIndex, int endIndex, String text)
{
    if (text.matches(Constants.DIGITS_PATTERN) || text.equals(Constants.EMPTY_STRING)) {
        super.replaceText(startIndex, endIndex, text);
    }
}

@Override
public void replaceSelection(String text)
{
    if (text.matches(Constants.DIGITS_PATTERN) || text.equals(Constants.EMPTY_STRING)) {
        super.replaceSelection(text);
    }
}
}

Y la segunda forma es mediante la adición de un filtro de eventos.

Se da el fragmento de código.

 // restrict key input to numerals.
this.addEventFilter(KeyEvent.KEY_TYPED, new EventHandler<KeyEvent>() {
  @Override public void handle(KeyEvent keyEvent) {
    if (!"0123456789".contains(keyEvent.getCharacter())) {
      keyEvent.consume();
    }
  }
});

Mi pregunta es ¿cuál es la forma difamada de hacer esto? ¿Alguien puede ayudarme a recoger el derecho?

Respuestas a la pregunta(4)

Su respuesta a la pregunta