Сделайте JSpinner полностью числовым - PullRequest
10 голосов
/ 23 июня 2011

У меня есть Jspinner, который может варьироваться от minimum до maximum с шагом 0.1.Это работает отлично.Теперь я установил для редактора JSpinner значение NumberEditor, так как пользователь может редактировать текстовое поле, и мне нужны только числовые значения из этого.Это также работает, то есть, что бы ни вводил пользователь, редактор выдает мне только цифры в редакторе, когда я получаю значение, используя mySpinner.getValue().toString();.Теперь проблема конусов.Я хочу, чтобы текстовое поле принимало только числовые значения и .(decimal point), то есть, если пользователь пытается ввести что-либо, кроме 0-9 и ., оно не должно отображаться в текстовом поле.

JSpinner mySpinner = new JSpinner();
mySpinner.setModel(new SpinnerNumberModel(default,minimum,maximum,0.1));
mySpinner.setEditor(new JSpinner.NumberEditor(mySpinner,"##.#"));

Может кто-нибудь помочь мне с этим.Спасибо:)

1 Ответ

26 голосов
/ 23 июня 2011

Вы можете попробовать setAllowsInvalid(false) следующим образом:

JFormattedTextField txt = ((JSpinner.NumberEditor) mySpinner.getEditor()).getTextField();
((NumberFormatter) txt.getFormatter()).setAllowsInvalid(false);

При установке этого свойства Jspinner будет показывать только допустимые значения в поле и игнорирует все другие значения, введенные пользователем. также пользователь не сможет удалить все значение, введенное в Jspinner, т.е. если пользователь попытается выбрать все значение и удалить его будет запрещено. Пользователь может редактировать поле только с допустимым значением, в противном случае оно будет выглядеть как недоступное для редактирования.

...