![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Real McCoy |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 113 Регистрация: 28.6.2007 Репутация: 2 Всего: 2 |
Здравствуйте все!
Есть проблема, мне надо найти направление мыслей, чтобы её решить На форме есть JSpinner для ввода нецелых чисел. В системе стоит русская локаль, т.е. десятичный разделитель - запятая. При неправильном вводе в поле спиннера, он просто сбрасывает значение к предыдущему успешному, а так как на форме много контролов, то необходимо, чтобы было ещё какое-нибудь сообщение о неправильном вводе. Сейчас решаю это след. образом: ловлю уход фокуса с поля ввода спиннера и пытаюсь преобразовать введённое в него значение:
если бросается исключение, значит ввод неправильный. Проблема проявляется вот как:
Не могу придумать, как это всё упорядочить. Пример кода мне не требуется, нужна идея, в какою сторону думать. Спасибо! |
|||
|
||||
| dorogoyIV |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1503 Регистрация: 26.3.2007 Репутация: 36 Всего: 46 |
нечто подобное я делал для своего "особо одаренного" в компьютерных делах начальника. замучился я с ним, и тупо написал replace(".", ",")
|
|||
|
||||
| Real McCoy |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 113 Регистрация: 28.6.2007 Репутация: 2 Всего: 2 |
Всё оказалось ещё сложнее, чем я думал вначале :(
Кто-нибудь знает, ловится ли (и если - да, то как) вот это самое событие, когда спиннер автоматически откатывает значение к предыдущему в случае, когда введено неверное? Потому что спиннер сам делает всю работу по валидации значений, остаётся только предупредить пользователя, что изменения во поле спиннера были откачены. |
|||
|
||||
| Real McCoy |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 113 Регистрация: 28.6.2007 Репутация: 2 Всего: 2 |
Проблема в принципе решена. Не знаю, насколько решение хорошо, но может кому пригодится...
Итак, события редактирования и изменения значения спиннера (JSpinner) происходят не в нём самом, а в текстовом поле его editor'а (((JSpinner.DefaultEditor)spinner.getEditor()).getTextField()). Напомню, что речь идёт о спиннере с числовой моделью (SpinnerNumberModel). При вводе значения, не попадающего в диапазон установленных значений, либо при некорректном вводе (например, буквы вместо цифр), спиннер автоматом откатывает значение к предыдущему после потери фокуса. Обнаружил, что после неправильного ввода и потери фокуса у поля бросается событие PropertyChangeEvent с именем "editValid" и значениями: новым - true и старым - false. (Кстати, оно же бросается при вводе каждого символа и имеет значение, соответствующее текущему значению поля). При этом эдитор откатывает значение до предыдущего правильного. В случае правильного ввода, после потери фокуса бросается то же событие с именем "value" и старым/новым значениями, соответствующими значению поля спиннера. Код получился такой:
Надеюсь, кому-нибудь окажутся полезными мои изыскания Всем спасибо! |
|||
|
||||
| Mi2Me |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 26.2.2012 Репутация: нет Всего: нет |
Спасибо большое! Мне очень помогло )
|
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |