package org.jabref.gui.util; import java.util.function.UnaryOperator; import java.util.regex.Pattern; import javafx.scene.control.TextFormatter; import javafx.util.converter.IntegerStringConverter; /** * Formatter that only accepts integer. * * More or less taken from http://stackoverflow.com/a/36749659/873661 */ public class OnlyIntegerFormatter extends TextFormatter<Integer> { public OnlyIntegerFormatter() { this(0); } public OnlyIntegerFormatter(Integer defaultValue) { super(new IntegerStringConverter(), defaultValue, new IntegerFilter()); } private static class IntegerFilter implements UnaryOperator<Change> { private final static Pattern DIGIT_PATTERN = Pattern.compile("\\d*"); @Override public Change apply(TextFormatter.Change aT) { return DIGIT_PATTERN.matcher(aT.getText()).matches() ? aT : null; } } }