What is the recommended way to make a numeric TextField in JavaFX?


Question

I need to restrict input into a TextField to integers. Any advice?

1
75
9/26/2011 1:10:02 PM

Accepted Answer

Very old thread, but this seems neater and strips out non-numeric characters if pasted.

// force the field to be numeric only
textField.textProperty().addListener(new ChangeListener<String>() {
    @Override
    public void changed(ObservableValue<? extends String> observable, String oldValue, 
        String newValue) {
        if (!newValue.matches("\\d*")) {
            textField.setText(newValue.replaceAll("[^\\d]", ""));
        }
    }
});
98
10/14/2017 8:52:26 AM

I know this is a rather old thread, but for future readers here is another solution I found quite intuitive:

public class NumberTextField extends TextField
{

    @Override
    public void replaceText(int start, int end, String text)
    {
        if (validate(text))
        {
            super.replaceText(start, end, text);
        }
    }

    @Override
    public void replaceSelection(String text)
    {
        if (validate(text))
        {
            super.replaceSelection(text);
        }
    }

    private boolean validate(String text)
    {
        return text.matches("[0-9]*");
    }
}

Edit: Thanks none_ and SCBoy for your suggested improvements.


Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon