4

我在 JavaFX 中使用带有 contenteditable 主体的 WebView 作为富文本编辑器。它工作正常,但我需要听按键。它适用于输入键和 ASCII 字符,但重音字符(如冰岛语 á 和 é)不会触发任何事件。我尝试了 KeyEvent.KEY_PRESSED 和 KeyEvent.KEY_TYPED,但它们都不会触发重音字符。

InputMethodEvent 确实会触发重音字符,但如果我为此设置了一个侦听器,它似乎会自动使用该事件并且它不会到达编辑器。

任何人都知道在输入不消耗重音字符时侦听事件的方法,或者在 InputMethodEvent 中取消消耗字符的方法?

4

1 回答 1

1

您可以使用Node.addEventHandler方法将 KeyEvent EventHandler 添加到任何节点(在本例中为您的 WebView),如果您处理 EventType KeyEvent.KEY_TYPED您可以使用KeyEvent.getCharacter方法获取键入的unicode字符。看这个例子:

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;
                            }
                        }

                    });

如果您想比较忽略语言环境、大写、小写等的不同字符串,您可能需要查看Collat​​or类。如果您想考虑“á”和“a”相等,它可能会很有用。

祝你好运!

于 2015-08-24T17:50:40.137 回答