2017-02-17 2 views
2

Я хочу изменить фокус, если пользователь нажимает ENTER в выпадающем списке. Во-первых, я использовал прослушиватель действий, но это также будет срабатывать, когда пользователь изменит свое значение, нажав клавишу со стрелкой вверх или вниз или выбрав значение в раскрывающемся списке.JavaFX Combobox: манипуляционная клавиша нажата для ввода

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

Есть ли способ решить мою проблему?

Edit:

К сожалению я думал, что мое введение достаточно.

Итак, у меня есть небольшая форма с некоторыми текстовыми полями и comboBox. Чтобы повысить удобство использования, пользователю необходимо нажать клавишу ввода, чтобы перейти к следующему полю. Это прекрасно работает для текстовых полей:

textfield.setOnAction(e -> { 
     cmbTax.requestFocus(); 
}); 

Но если я зарегистрировать инициативную-слушателя, оно не будет выполнять мои требования, потому что он будет всегда срабатывает, когда значение изменяется:

cmbTax.setOnAction(e->textfield2.requestFocus()); 

Так я пытался ключевой слушатель, но он не реагирует на кнопку ENTER, потому что он обрабатывается внутренним перед моим слушателем будет называться:

cmbTax.getEditor().setOnKeyPressed(this::handleKeyPressedForComboBox); 

приветы

+1

Сообщение [mcve], показывают, что вы делали до сих пор и описав, где у вас есть проблемы. – MBec

ответ

1

Это работает для меня:

setOnKeyPressed(e -> { 
    if (e.getCode() == KeyCode.ENTER) { 
     System.out.println("TEST"); 
    } 
}); 

В вашем случае:

cmbTax.setOnKeyPressed(this::handleKeyPressedForComboBox); 
+0

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

Смежные вопросы