我們公司最近收到了我們將進一步開發的JavaFX應用程序的源代碼。我目前正在設置開發環境,並且遇到了Google無法解決的問題。JavaFX:ComboBox上的KeyTyped事件未觸發
該應用程序包含一個自動完成組合框,它在用戶輸入搜索字符串時過濾可用值。代碼如下:
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.
我知道這段代碼是正確的,因爲它在我們客戶的演示系統上正常工作。
但是,當我運行應用程序,句柄方法永遠不會執行。但是,如果我用keyReleased事件替換keyTyped事件,它確實會起作用。
我的問題是,哪些因素可能會影響這種行爲?
更改代碼不存在問題,因爲它無論如何對我們的客戶都能正常工作。此外,從我讀過的內容來看,使用keyTyped事件應該優先於使用keyReleased,因爲它更好地處理了鍵組合。
我使用NetBeans 8.0和Java 1.7.0_45運行項目。 以前開發該應用程序的公司使用NetBeans 7.2.1和Java 1.7.0_6。
看完這個問題的答案,它會幫助你http://stackoverflow.com/questions/7071757/keylistener-keypressed-versus-keytyped – 2014-09-19 08:17:00
'KEY_TYPED'事件可能是_consumed_嵌套'TextField'。但這並不能解釋爲什麼它在生產中起作用。也許'TextField'的實現在版本之間使用'KEY_PRESSED'切換到'KEY_TYPED'? – 2014-09-19 08:41:05