2013-02-20 59 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”相等。

祝你好运!