To allow the entry of aribtary percentages, use the facilities provided by JSpinner.NumberEditor, which allows you to set formatting so that the numbers will appear as percentages, like this (also untested code):
JSpinner spinner = new JPsinner();spinner.setEditor(new JSpinner.NumberEditor(spinner, "##%"));
Or even, going slightly OTT,
JSpinner spinner = new JSpinner();spinner.setEditor(new JSpinner.NumberEditor(spinner, DecimalFormat.getPercentInstance().toPattern()));
which will allow any arbitary percentage, including non-integer values (42.7%, say) use the current locale's decimal format.
If you want to only allow specific values (e.g. 0%, 25%, 50%, 75%, 100%) then if you want to have the percent sign in the textbox you could user a SpinnerListModel created from an array of the allowed vaules as strings, and then use luketheduke's "drop the % sign & divide by 100" code.