|
|
|
JavaFX: некорректно работает Listner на DatePicker.valueProperty()
|
|||
|---|---|---|---|
|
#18+
Люди добрые помогите. Наткнулся на странный баг, который победить кажется не в силах, хотя есть подозрение, граничащее с уверенностью, что я где-то туплю... Есть GUI на JavaFX (это фрагменты контроллера объекта). Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Сам объект заполняется отсюда (что по идее роли не игрет): private void fillGui(Anfrage anfrageObj) { ... //DatePicker if (anfrageObj.getEinkaufsDatum() != null) { ekDatumPicker.getEditor().setText(DateFormatResolver.getDateFormate().format(anfrageObj.getEinkaufsDatum())); } else { ekDatumPicker.getEditor().clear(); } //TextField storeTextField.setText(anfrageObj.getTerminals().getStore()); ... } Сразу поясню что "заполнение" работает корректно тут вопросов нет. Собственно вопрос: При любых изменениях даты или текстового поля ожидается срабатывание листенеров, однако как выяснилось это не всегда так. Так если поменять дату на другую - все срабатывает. Если поменять дату на пустю в парвый раз (!!!) листнер молчит. Т.е. если я имею дату "11.11.2011" и "чищу" поле - листнер молчит! Любопытно что если я меняю дату на "12.11.2011" листнер срабатывает, и если после этого (!!!) поменять дату на "" - листнер таки срабатывает, т.е. он не работает именно при вводе пустой строки в первый раз после загрузки. Для сравнения я привел тут и текстовое поле - оно отчего-то (вернее нет - это как раз ожидаемо) ведет себя корректно всегда. Собственно у меня переопределен DatePicker и я использую кастомный форматер, с которым и бился изрядно пока "для сранения" не поменял его на стандартный - он ведет себя 100% также неадекватно. Помогите подалуйста! Какого леса я не могу разглядеть за тремя соснами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2016, 12:05 |
|
||
|
JavaFX: некорректно работает Listner на DatePicker.valueProperty()
|
|||
|---|---|---|---|
|
#18+
Сорри нижнюю часть кода забыл завернуть в тэг, а редактировать уже никак. Вот оно (но, повторюсь, это собственно к вопросу не относится): Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2016, 12:10 |
|
||
|
JavaFX: некорректно работает Listner на DatePicker.valueProperty()
|
|||
|---|---|---|---|
|
#18+
Как искал решение в гугле? Потому как первая же ссылка http://stackoverflow.com/questions/32346893/javafx-datepicker-not-updating-value сообщает нам что это баг https://bugs.openjdk.java.net/browse/JDK-8092295 который, вроде бы, исправлен для JDK 9 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2016, 12:32 |
|
||
|
JavaFX: некорректно работает Listner на DatePicker.valueProperty()
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Ну нет у меня другая проблема. Вводимые значения что с улавиатуры что через "мышь" читаются адекватно при потере фокуса (листнер срабатывает). Не читается именно введенное пустое значение, причем именно только в первый раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2016, 12:50 |
|
||
|
JavaFX: некорректно работает Listner на DatePicker.valueProperty()
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Таки попробовал то что ояи советуют с тем чтобы "самому" вбивать значение: Код: java 1. 2. 3. 4. 5. 6. 7. Он сюда заходит в том числе при первом вводе "пустого" значение, что для меня уже прорыв конечно, НО дальнейшее поведение увы не поменялось. После выставления значение листнер не срабатывает. Попробовал из интереса ставить не пустое значение - Код: java 1. 2. 3. листнер срабатывает всегда. Проблема именна с этим "null" ((((( Java: 1.8.0 u101 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2016, 13:13 |
|
||
|
JavaFX: некорректно работает Listner на DatePicker.valueProperty()
|
|||
|---|---|---|---|
|
#18+
Итак найдено "решение", поражающее своей тупостью... Учитывая что это все происхожит именно в первый раз, произошло "радикальное переосмысление" и было решено сделать этот трепетный первый раз вторым. При заполнении ГУИ имею следующее: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. Таким образом значение в DatePicker хотя бы раз было уже изменено. Далее листнер корректно работает в случае пустого значения "с первого раза". Но это просто нет же матерных слов как я ненавижу такие вот места... И времени сколько убито... Гадство. Словом если кто в курсе что сие такое дайте знать пожалуйста. Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2016, 13:25 |
|
||
|
JavaFX: некорректно работает Listner на DatePicker.valueProperty()
|
|||
|---|---|---|---|
|
#18+
RuslanGabСловом если кто в курсе что сие такое дайте знать пожалуйста. Я бы на вашем месте дебажил JavaFX классы чтобы разобраться в источнике проблемы. И сам бы с радостью покопался, но некогда, к сожалению. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2016, 13:27 |
|
||
|
JavaFX: некорректно работает Listner на DatePicker.valueProperty()
|
|||
|---|---|---|---|
|
#18+
Блин не то место скопировал. Извиняюсь. Так выглядит сей костылище если кому интересно: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2016, 13:27 |
|
||
|
JavaFX: некорректно работает Listner на DatePicker.valueProperty()
|
|||
|---|---|---|---|
|
#18+
BlazkowiczRuslanGabСловом если кто в курсе что сие такое дайте знать пожалуйста. Я бы на вашем месте дебажил JavaFX классы чтобы разобраться в источнике проблемы. И сам бы с радостью покопался, но некогда, к сожалению. Да блин тоже сроки уже поджимают. К тому же тут с дебагом большая проблема: куда ставить "точку"? Я же пытался блин... В запущенной программе все "мертво". Разве что вот в удалось focusedProperty отловить что что-то таки происходит и более того текст все же "пуст". Он в листнер и не заходит при этом "первом изменении". Не заходит откуда и почему? Так ето надо небольшой проект создать именно с этой локальной проблемой и смотреть "с самого начала" как идет загрузка, что не на полчасика... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2016, 13:34 |
|
||
|
JavaFX: некорректно работает Listner на DatePicker.valueProperty()
|
|||
|---|---|---|---|
|
#18+
аллилуйя разобрался подумав за обедом!!! корень зла был таки в заполнении ГУИ (ну и некоторой все же сырости FX, ибо сие поведение как по мне не совсем очевидно, так сказать). Код: java 1. 2. 3. 4. Сей метод избран мною дабы иметь нужный формат даты в эдиторе. при этом для меня самоочевидно, что когда я его ввожу, значение самого DatePicker тоже меняется. Так вот как оказалось это ни разу не так. Я так и не понимаю почему, но вот так уж оно есть... Оказалось эдитор имеет значение, а сам DatePicker имеет null. По этой причине "очистка" эдитора не вызывала реакции листнера, ибо по его разумению ничего и не менялось. В дальнейшем же значение листнера заполнялось и "ноль" уже приводил к нужной реакции. Отчего вбивание в эдитор даты в ручную приводит к выставлению даты у DatePicker а вот такое программное нет для меня совершенно не ясно, но как бы то ни было проблема решилась без очевидных костелей и слава богу. Код: java 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2016, 14:40 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39321002&tid=2123647]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
179ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
| others: | 251ms |
| total: | 542ms |

| 0 / 0 |
