powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / JavaFX: некорректно работает Listner на DatePicker.valueProperty()
10 сообщений из 10, страница 1 из 1
JavaFX: некорректно работает Listner на DatePicker.valueProperty()
    #39320901
RuslanGab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Люди добрые помогите. Наткнулся на странный баг, который победить кажется не в силах, хотя есть подозрение, граничащее с уверенностью, что я где-то туплю...
Есть GUI на JavaFX (это фрагменты контроллера объекта).
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
    @Override
    public void initialize(URL location, ResourceBundle resources) { 
        ...
        setActionListners();        
        ...             
    }

    private void setActionListners() {            
        ...
        //TextField
        storeTextField.textProperty().addListener((observable, oldValue, newValue) -> {                    
            System.out.println("LISTNER");
        });
           
        //DatePicker 
        ekDatumPicker.valueProperty().addListener((observable, oldValue, newValue) -> {  
            System.out.println("LISTNER");
        });           
       ...
    }  



Сам объект заполняется отсюда (что по идее роли не игрет):
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% также неадекватно. Помогите подалуйста! Какого леса я не могу разглядеть за тремя соснами?
...
Рейтинг: 0 / 0
JavaFX: некорректно работает Listner на DatePicker.valueProperty()
    #39320907
RuslanGab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сорри нижнюю часть кода забыл завернуть в тэг, а редактировать уже никак. Вот оно (но, повторюсь, это собственно к вопросу не относится):
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
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());
...
}
...
Рейтинг: 0 / 0
JavaFX: некорректно работает Listner на DatePicker.valueProperty()
    #39320925
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как искал решение в гугле?
Потому как первая же ссылка
http://stackoverflow.com/questions/32346893/javafx-datepicker-not-updating-value
сообщает нам что это баг
https://bugs.openjdk.java.net/browse/JDK-8092295
который, вроде бы, исправлен для JDK 9
...
Рейтинг: 0 / 0
JavaFX: некорректно работает Listner на DatePicker.valueProperty()
    #39320945
RuslanGab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

Ну нет у меня другая проблема. Вводимые значения что с улавиатуры что через "мышь" читаются адекватно при потере фокуса (листнер срабатывает). Не читается именно введенное пустое значение, причем именно только в первый раз.
...
Рейтинг: 0 / 0
JavaFX: некорректно работает Listner на DatePicker.valueProperty()
    #39320976
RuslanGab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

Таки попробовал то что ояи советуют с тем чтобы "самому" вбивать значение:

Код: java
1.
2.
3.
4.
5.
6.
7.
        this.focusedProperty().addListener((arg0, oldPropertyValue, newPropertyValue) -> {
            if (!newPropertyValue){
                if (this.getEditor().getText().isEmpty()) {
                    this.setValue(null);
                }
            }
        });  



Он сюда заходит в том числе при первом вводе "пустого" значение, что для меня уже прорыв конечно, НО дальнейшее поведение увы не поменялось. После выставления значение листнер не срабатывает.
Попробовал из интереса ставить не пустое значение -

Код: java
1.
2.
3.
                if (this.getEditor().getText().isEmpty()) {
                    this.setValue(LocalDate.now());
                }



листнер срабатывает всегда. Проблема именна с этим "null" (((((


Java: 1.8.0 u101
...
Рейтинг: 0 / 0
JavaFX: некорректно работает Listner на DatePicker.valueProperty()
    #39320998
RuslanGab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Итак найдено "решение", поражающее своей тупостью... Учитывая что это все происхожит именно в первый раз, произошло "радикальное переосмысление" и было решено сделать этот трепетный первый раз вторым. При заполнении ГУИ имею следующее:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
    private void setActionListners() {            
        ...           
        //DatePicker 
        ekDatumPicker.setValue(java.time.LocalDate.now());
        ekDatumPicker.valueProperty().addListener((observable, oldValue, newValue) -> {  
            System.out.println("LISTNER");
        });           
       ...
    } 



Таким образом значение в DatePicker хотя бы раз было уже изменено. Далее листнер корректно работает в случае пустого значения "с первого раза".

Но это просто нет же матерных слов как я ненавижу такие вот места... И времени сколько убито... Гадство. Словом если кто в курсе что сие такое дайте знать пожалуйста.

Спасибо!
...
Рейтинг: 0 / 0
JavaFX: некорректно работает Listner на DatePicker.valueProperty()
    #39321001
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RuslanGabСловом если кто в курсе что сие такое дайте знать пожалуйста.
Я бы на вашем месте дебажил JavaFX классы чтобы разобраться в источнике проблемы. И сам бы с радостью покопался, но некогда, к сожалению.
...
Рейтинг: 0 / 0
JavaFX: некорректно работает Listner на DatePicker.valueProperty()
    #39321002
RuslanGab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блин не то место скопировал. Извиняюсь. Так выглядит сей костылище если кому интересно:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
private void fillGui(Anfrage anfrageObj) {
...
    //DatePicker
    ekDatumPicker.setValue(java.time.LocalDate.now());
    if (anfrageObj.getEinkaufsDatum() != null) {
        ekDatumPicker.getEditor().setText(DateFormatResolver.getDateFormate().format(anfrageObj.getEinkaufsDatum()));
    } else {
        ekDatumPicker.getEditor().clear();
    }
...
}
...
Рейтинг: 0 / 0
JavaFX: некорректно работает Listner на DatePicker.valueProperty()
    #39321008
RuslanGab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczRuslanGabСловом если кто в курсе что сие такое дайте знать пожалуйста.
Я бы на вашем месте дебажил JavaFX классы чтобы разобраться в источнике проблемы. И сам бы с радостью покопался, но некогда, к сожалению.

Да блин тоже сроки уже поджимают.
К тому же тут с дебагом большая проблема: куда ставить "точку"? Я же пытался блин... В запущенной программе все "мертво". Разве что вот в удалось focusedProperty отловить что что-то таки происходит и более того текст все же "пуст". Он в листнер и не заходит при этом "первом изменении". Не заходит откуда и почему? Так ето надо небольшой проект создать именно с этой локальной проблемой и смотреть "с самого начала" как идет загрузка, что не на полчасика...
...
Рейтинг: 0 / 0
JavaFX: некорректно работает Listner на DatePicker.valueProperty()
    #39321072
RuslanGab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
аллилуйя разобрался подумав за обедом!!!

корень зла был таки в заполнении ГУИ (ну и некоторой все же сырости FX, ибо сие поведение как по мне не совсем очевидно, так сказать).

Код: java
1.
2.
3.
4.
//DatePicker
if (anfrageObj.getEinkaufsDatum() != null) {
ekDatumPicker.getEditor().setText(DateFormatResolver.getDateFormate().format(anfrageObj.getEinkaufsDatum()));
}



Сей метод избран мною дабы иметь нужный формат даты в эдиторе. при этом для меня самоочевидно, что когда я его ввожу, значение самого DatePicker тоже меняется. Так вот как оказалось это ни разу не так. Я так и не понимаю почему, но вот так уж оно есть... Оказалось эдитор имеет значение, а сам DatePicker имеет null. По этой причине "очистка" эдитора не вызывала реакции листнера, ибо по его разумению ничего и не менялось. В дальнейшем же значение листнера заполнялось и "ноль" уже приводил к нужной реакции.
Отчего вбивание в эдитор даты в ручную приводит к выставлению даты у DatePicker а вот такое программное нет для меня совершенно не ясно, но как бы то ни было проблема решилась без очевидных костелей и слава богу.

Код: java
1.
ekDatumPicker.setValue(new java.sql.Date(anfrageObj.getEinkaufsDatum().getTime()).toLocalDate());
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / JavaFX: некорректно работает Listner на DatePicker.valueProperty()
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]