Another way to solve the problem is with a custom SpinnerNumberModel.
But while this was a fun exercise in Swing model manipulation, I think that Michael's way is simpler and thus less likely to result in errors. Though on the other hand, if you need to tie several JSpinner models together, then perhaps I would prefer a variation on my technique (I would have to notify multiple models of changes via an observer/listener
pattern).