JavaFX: событие KeyTyped в ComboBox не срабатывает

Недавно наша компания получила исходный код приложения JavaFX, которое мы будем развивать дальше. В настоящее время я настраиваю среду разработки и столкнулся с проблемой, которую Google не может решить.

Приложение содержит поле со списком с автозаполнением, которое фильтрует доступные значения, когда пользователь вводит строку поиска. Код выглядит следующим образом:

        final ComboBox<Sifrant> inputCB = new ComboBox<Sifrant>();
        inputCB.setId(formName + "_" + field);
        inputCB.setEditable(true);
        inputCB.setPrefWidth(nextControlDoubleSize ? 500 : 300);

        inputCB.setOnKeyTyped(new EventHandler<KeyEvent>() {

            @Override
            public void handle(KeyEvent event) {
                //etc. etc.

Я знаю, что этот код правильный, потому что он правильно работает на демонстрационной системе нашего клиента.

Но когда я запускаю приложение, метод дескриптора никогда не выполняется. Но это сработает, если я заменю событие keyTyped событием keyReleased.

Мой вопрос в том, какие факторы могут повлиять на такое поведение?

Об изменении кода не может быть и речи, так как он и так работает правильно для наших клиентов. Кроме того, из того, что я прочитал, предполагается, что использование события keyTyped предпочтительнее использования keyReleased, поскольку оно лучше обрабатывает комбинации клавиш.

Я запускаю проект с NetBeans 8.0 и Java 1.7.0_45. Компания, ранее разработавшая приложение, использовала NetBeans 7.2.1 и Java 1.7.0_6.


person jgosar    schedule 19.09.2014    source источник
comment
Хорошо прочитайте ответ на этот вопрос, он поможет вам stackoverflow.com/questions /7071757/   -  person Thusitha Thilina Dayaratne    schedule 19.09.2014
comment
Событие KEY_TYPED, вероятно, используется вложенным событием TextField. Однако это не объясняет, почему это работает в продакшене. Может быть, реализация TextField переключилась с использования KEY_PRESSED на KEY_TYPED между версиями?   -  person Tomas Mikula    schedule 19.09.2014


Ответы (1)


Неважно, на этот вопрос есть довольно очевидный ответ. Все заработало, когда я перешел на JDK 1.7.0_6.

Но я думаю, полезно, что эта ветка существует на случай, если кто-то еще застрянет на аналогичной проблеме.

Поскольку в коде явно нет ничего плохого, это, вероятно, означает, что это ошибка, появившаяся в Java между версиями 1.7.0_6 и 1.7.0_45.

person jgosar    schedule 19.09.2014
comment
Если это работает с 1.7.0_6, то должно работать и с 1.7.0_45, если только вы не написали что-то внутри handle, которое больше не поддерживается :) - person ItachiUchiha; 19.09.2014