Когда установлен пользовательский SpinnerModel, вызывается JSpinner.DefaultEditor.
Oracle
JSpinner.DefaultEditor: Реализует не редактируемый компонент, который отображает значение счетчика.
Поэтому JSpinner.DefaultEditor должен быть расширен для создания «MyCustomEditor» и с
getTextField().setEditable(true);
JFormattedTextField можно сделать редактируемым.
Также «MyCustomEditor» является правильным местом для добавления любого FormatterFactory в текстовое поле.
Тем не менее, пользователь сможет вводить недопустимый текст, даже объекты, в текстовое поле, как было сделано JFormattedTextField. Но с помощью пользовательского FormatterFactory, который предоставляет хороший пользовательский «MyFormatter», расширяет AbstractFormatter любой недопустимый контент, введенный пользователем, никогда не попадет в JSpinner.