|
|
|
Слушатель для JSpinner
|
|||
|---|---|---|---|
|
#18+
Доброго времени! Возможно, задам сейчас всем надоевший вопрос, но сам не могу найти ответа, уж простите новичка. Проблема такова - хотелось бы заставить JSpinner реагировать на изменение значения методом набора с клавиатуры. Значение, набранное таким образом, присваивается лишь в том случае, если кликнуть по какому-то другому элементу или при нажатии Enter. А хотелось бы чтобы оно присваивалось сразу, без указанных манипуляций. Пробовал такой пример: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. - не получается, реакция только при нажатии Enter Мог бы кто-то объяснить, в чем проблема? Заранее благодарю! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2013, 13:44:47 |
|
||
|
Слушатель для JSpinner
|
|||
|---|---|---|---|
|
#18+
Неужели никто не сталкивался с таким? Ни в жизнь не поверю! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2013, 14:43:39 |
|
||
|
Слушатель для JSpinner
|
|||
|---|---|---|---|
|
#18+
ПолуламерНеужели никто не сталкивался с таким? Ни в жизнь не поверю! Spinner редко используется. А там Formatter точно пропускает значение до окончания ввода? Выложи запускабельный тест, я подебажу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2013, 14:54:54 |
|
||
|
Слушатель для JSpinner
|
|||
|---|---|---|---|
|
#18+
Я, собственно, запускал пример по этой ссылке: http://kulibaba.net/programming/java/listener/swing.jspinner Реагирует только на переключения стрелок на JSpinner или нажатие Enter, "путем ввода с клавиатуры" молчит как рыба об лед. А какая альтернатива для JSpinner, если он так редко используется? Для текущего задания нужен именно такой контрол, со стрелками, с границами, с шагом, есть что-то другое такого же плана? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2013, 16:02:45 |
|
||
|
Слушатель для JSpinner
|
|||
|---|---|---|---|
|
#18+
ПолуламерЯ, собственно, запускал пример по этой ссылке: http://kulibaba.net/programming/java/listener/swing.jspinner Реагирует только на переключения стрелок на JSpinner или нажатие Enter, "путем ввода с клавиатуры" молчит как рыба об лед. А какая альтернатива для JSpinner, если он так редко используется? Для текущего задания нужен именно такой контрол, со стрелками, с границами, с шагом, есть что-то другое такого же плана? Не очень понятен и смысл такого запроса. Т.е. надо ввести 123. Нажимаем 1 - UI обновляется для значения 1 Нажимаем 2 - UI обновляется для значения 12 Нажимаем 3 - UI обновляется для значения 123 Зачем два раза реагировать на два неполноценных значения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2013, 16:35:47 |
|
||
|
Слушатель для JSpinner
|
|||
|---|---|---|---|
|
#18+
Вот так работает. Код: java 1. 2. 3. 4. У вас идея верная, но вы даже не удосужились сообщить что там исключение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2013, 16:41:55 |
|
||
|
Слушатель для JSpinner
|
|||
|---|---|---|---|
|
#18+
Blazkowicz , благодарю - сейчас JSpinner действительно делает то, что хотелось. Если что-то недосказал в своем сумбурном вопросе - извините, это не со зла ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2013, 17:14:45 |
|
||
|
Слушатель для JSpinner
|
|||
|---|---|---|---|
|
#18+
Пардон - я чуть поторопился, теперь вынужден еще раз побеспокоить. Не подскажете, как эту отлаженную методу (которая отлично работает в виде отдельной программы) прицепить к JSpinner в вызываемом немодальном диалоге? Перепробовал несколько вариантов - нуль-реакция при вводе с клавиатуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2013, 17:38:49 |
|
||
|
Слушатель для JSpinner
|
|||
|---|---|---|---|
|
#18+
Сдаюсь, ничего не получается с этим JSpinner в диалоге - не реагирует на ввод с клавиатуры. Объясните, пожалуйста, что не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2013, 12:51:02 |
|
||
|
Слушатель для JSpinner
|
|||
|---|---|---|---|
|
#18+
Родной swing-овский слушатель, которого присвоил этому JSpinner-компоненту, заменяет при вызове у formatter в свойстве commitOnEdit значение true на false. Как же добиться, чтобы этого не происходило, a? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2013, 13:23:00 |
|
||
|
Слушатель для JSpinner
|
|||
|---|---|---|---|
|
#18+
Нет, ну это все-таки интересно, пока не пойму, успокаиваться не собираюсь Вот один переписанный класс: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. При его использовании в GUI, если после ввода кликнуть на другом контроле (неважно каком), то сработает "родной" слушатель stateChanged и выполнится то, что положено. А вот другой класс, наподобие: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. С ним не получается ничего при переключении на другой контрол (молчу уже о реакции на ввод с клавиатуры). Пробовал другой слушатель: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. С ним та же ситуация - нулевая реакция при потере фокуса. Пожалуйста, подскажите, что здесь неправильно? Понимаю, вопросы дурацкие, но раньше со слушателями Java дела иметь не доводилось, потому столько ошибок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2013, 18:08:26 |
|
||
|
Слушатель для JSpinner
|
|||
|---|---|---|---|
|
#18+
Думаю, листенеры надо совать сюда Код: java 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2013, 18:33:59 |
|
||
|
Слушатель для JSpinner
|
|||
|---|---|---|---|
|
#18+
ну там ещё вот это все Код: java 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2013, 18:34:56 |
|
||
|
Слушатель для JSpinner
|
|||
|---|---|---|---|
|
#18+
Увы, DocumentListener тоже ничего не прослушивает Что-то я делаю не так с JSpinner, ведь приводится столько примеров, которые вроде должны работать. Есть еще предложения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2013, 11:02:47 |
|
||
|
Слушатель для JSpinner
|
|||
|---|---|---|---|
|
#18+
Полуламер, у мну работает например Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2013, 11:18:26 |
|
||
|
Слушатель для JSpinner
|
|||
|---|---|---|---|
|
#18+
Возможно нужно ещё попросить спиннер обновить модель: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2013, 11:25:49 |
|
||
|
Слушатель для JSpinner
|
|||
|---|---|---|---|
|
#18+
ЛагманПолуламер, у мну работает например Понимаете, Ваш код оформлен как пример самостоятельной программы. У меня давно получилось сделать именно то что нужно, уважаемый Blazkowicz помог еще здесь 14294099 . Думаю, что если просто скопирую Ваш код в отдельный конкретный java-класс, то все тоже получится. Но у меня задача-то ведь - переписать JSpinner так, чтобы он начал понимать либо этот блок: Код: java 1. 2. 3. - это вообще идеальный вариант, либо чтобы сработал какой-нибудь listener. Но все варианты классов - со слушателями или без - отказываются работать в теле проекта, ничего из написанного выше не функционирует. То есть создаю с помощью GUI (в моем случае это JFormDesigner) на форме контрол класса JSpinner, заменяю потом этот класс на свой созданный, все компилируется и запускается безо всяких ошибок, но никакой реакции при этом не наблюдается. Господин Blazkowicz , во имя победы в замке Wolfenstein - отзовитесь, пожалуйста! Возможно, решение совсем близко, очень не хочется заменять удобный компонент тупыми, хотя и модифицированными потомками JTextField. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2013, 11:44:54 |
|
||
|
Слушатель для JSpinner
|
|||
|---|---|---|---|
|
#18+
Полуламер, Возьмете ваш код. Удалите лишнее и сделайте запускаемый пример того как приведенное решение не работает. Из сумбурных объяснение выше, мне пока сложно понять в чем дело. А разбираться сейчас, к сожалению, мало времени. Если будет запускаемый пример, могу за пару минут отдебажить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2013, 11:48:15 |
|
||
|
Слушатель для JSpinner
|
|||
|---|---|---|---|
|
#18+
Полуламер, Полуламерзаменяю потом этот класс на свой созданный, Можете пояснить подробнее эту строку? Вы уверены, что в итоге в форму попадает именно ваш контрол? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2013, 12:16:53 |
|
||
|
Слушатель для JSpinner
|
|||
|---|---|---|---|
|
#18+
Лагман, да, уверен, иначе реакции на нажатие клавиши не происходит. Но между тем я понял причину, из-за чего не происходит реакция на нажатие клавиши, т.е. stateChanged не срабатывает. Похоже, теперь у меня вопрос уже к знатокам JFormDesigner, или опять ошибаюсь. Итак, новый класс: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. Я создал новый диалог, на нем разместил JSpinner, поменял класс с JSpinner на JFMSpinner, в обработчике stateChanged прописываю отслеживание изменений значения: Код: java 1. 2. 3. Модель спиннера не меняю, т.е. она остается неприсвоенной. Если посмотреть секцию initComponents, то относительно этого JSpinner там первоначально значится: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. Если в этом случае запустить тест, то спиннер работает абсолютно корректно - реагирует как на нажатие цифровых клавиш (поскольку является экземпляром нового класса, в котром прописано свойство форматтера setCommitsOnValidEdit(true)), так и на свои стандартные переключатели, в консоли выдаются значения. Но если изменить модель - а это случается в 99,99 % случаев, мало ли, надо выставить границы, шаг, изменить тип модели с Integer на Float. Тогда к инициализации JSpinner в initComponents добавляется строчка типа: Код: java 1. Все - если она есть, никакой реакции на ввод с клавиатуры не будет, если произвести грязный трюк и закомментировать ее вручную - спиннер как новенький, значения опять выдаются. Вот такая непонятная ситуация, как с этим быть - ума не приложу, мне нужны модели именно типа Float, при этом по ходу дела их значения многократно переприсваиваются. Понимаю, что это уже вопрос по обработке JSpinner специализированным дизайнером, но, может, кто-то знает, как побороть эту проблему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2013, 13:57:06 |
|
||
|
Слушатель для JSpinner
|
|||
|---|---|---|---|
|
#18+
Опять тороплюсь, но ничего не могу поделать - время поджимает, в первом описании JSpinner (сразу после размещения его на форме) изначально нет строчки с присваиванием модели - забыл ее удалить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2013, 13:59:39 |
|
||
|
Слушатель для JSpinner
|
|||
|---|---|---|---|
|
#18+
После долгих и мучительных экспериментов выяснил, что любое присваивание модели - с помощью дизайнера или программное, то есть строчка spinner.setmodel(...) начисто губит нужную функцию, реализуемую новым классом. Решил проблему следующим способом - присваивать значения не скопом, а по отдельности, например: Код: java 1. 2. 3. 4. После сделанных таким образом изменений значение JSpinner, вводимую вручную, будет фиксироваться в обработчике stateChanged. Теперь вроде все работает как надо. Blazkowicz , спасибо Вам еще раз за помощь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2013, 12:53:19 |
|
||
|
Слушатель для JSpinner
|
|||
|---|---|---|---|
|
#18+
Господа, я понимаю - конец рабочей недели, всем охота по домам, но не глянете ли на конкретную задачку? Думал, грешным делом все как с JSpinner, ан нет - там свои заморочки. Вобщем, хотелось бы фиксировать изменения при вводе с клавиатуры у компонента - потомка класса JFormattedTextField. Создаю его таким образом: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Создаю на форме компонент, но при вводе чисел не происходит реакции, т.е. полю ничего не присваивается. В чем загвоздка, а? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2013, 15:07:02 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=227&tid=2129295]: |
0ms |
get settings: |
13ms |
get forum list: |
20ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
33ms |
get topic data: |
15ms |
get forum data: |
4ms |
get page messages: |
73ms |
get tp. blocked users: |
2ms |
| others: | 271ms |
| total: | 443ms |

| 0 / 0 |
