Недавно наша компания получила исходный код приложения 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.
KEY_TYPED
, вероятно, используется вложенным событиемTextField
. Однако это не объясняет, почему это работает в продакшене. Может быть, реализацияTextField
переключилась с использованияKEY_PRESSED
наKEY_TYPED
между версиями? - person Tomas Mikula   schedule 19.09.2014