2013-02-20 57 views
4

我在JavaFX中使用帶有自給體的WebView作爲富文本編輯器。它工作正常,但我需要聽取按鍵。它適用於輸入鍵和ASCII字符,但重音字符(如冰島á和é)不會觸發任何事件。我嘗試了KeyEvent.KEY_PRESSED和KeyEvent.KEY_TYPED,並且它們都沒有爲重音字符激發。JavaFX KeyEvent和重音字符

InputMethodEvent會爲重音字符觸發,但是如果爲此設置了偵聽器,它似乎會自動使用該事件,並且不會觸及編輯器。

任何人都知道當重音字符被輸入時不會消耗它們或偵聽InputMethodEvent中的字符的方法時偵聽事件的方法?

+0

您使用哪種操作系統和JavaFX版本? – 2013-02-21 10:15:54

回答

1

您可以用Node.addEventHandler方法(你的WebView在這種情況下)添加一個KeyEvent的事件處理程序的任何節點,如果你處理事件類型KeyEvent.KEY_TYPED你可以鍵入的的Unicode字符KeyEvent.getCharacter方法。看到這個例子:

WebView myWebView = new WebView(); 
myWebView.addEventHandler(KeyEvent.KEY_TYPED, 
        new EventHandler<KeyEvent>() 
        { 
         @Override 
         public void handle(KeyEvent event) 
         { 
          System.out.println("Unicode character typed: "+event.getCharacter()); 

          switch (event.getCharacter()) 
          { 
          case "á": 
           System.out.println("Typed accented a"); 
           break; 
          case "é": 
           System.out.println("Typed accented e"); 
           break; 
          case "í": 
           System.out.println("Typed accented i"); 
           break; 
          case "ó": 
           System.out.println("Typed accented o"); 
           break; 
          case "ú": 
           System.out.println("Typed accented u"); 
           break; 
          default: 
           System.out.println("Typed other key " + event.getCode()); 
           break; 
          } 
         } 

        }); 

你可能想,如果你想比較不同的字符串忽略語言環境,大寫字母,小寫字母,等等。如果你要考慮「A」,或許可以看一看在Collator類和「a」相等。

祝你好運!