2014-09-19 49 views
2

我們公司最近收到了我們將進一步開發的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。

+0

看完這個問題的答案,它會幫助你http://stackoverflow.com/questions/7071757/keylistener-keypressed-versus-keytyped – 2014-09-19 08:17:00

+0

'KEY_TYPED'事件可能是_consumed_嵌套'TextField'。但這並不能解釋爲什麼它在生產中起作用。也許'TextField'的實現在版本之間使用'KEY_PRESSED'切換到'KEY_TYPED'? – 2014-09-19 08:41:05

回答

0

沒關係,這個問題有一個非常明顯的答案。當我切換到JDK 1.7.0_6時,它全部開始正常工作。

但我想這是有用的,這個線程存在的情況下,其他人被困在類似的問題。

由於代碼沒有明顯錯誤,這可能意味着它是在1.7.0_6和1.7.0_45版本之間引入到Java中的錯誤。

+0

如果它適用於'1.7.0_6',它應該與'1.7.0_45'一起工作,除非你在'handle'裏面寫了一些內容,這不再支持:) – ItachiUchiha 2014-09-19 09:50:05