JavaFX KeyEvent 和重音字符

Ein*_*son 5 java javafx javafx-2

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

\n\n

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

\n\n

有人知道在键入重音字符时监听事件而不消耗它们的方法,或者知道一种不消耗 InputMethodEvent 中的字符的方法吗?

\n

Jav*_*erJ 1

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

\n\n
WebView myWebView = new WebView();\nmyWebView.addEventHandler(KeyEvent.KEY_TYPED,\n                    new EventHandler<KeyEvent>()\n                    {\n                        @Override\n                        public void handle(KeyEvent event)\n                        {\n                            System.out.println("Unicode character typed: "+event.getCharacter());\n\n                            switch (event.getCharacter())\n                            {\n                            case "\xc3\xa1":\n                                System.out.println("Typed accented a");\n                                break;\n                            case "\xc3\xa9":\n                                System.out.println("Typed accented e");\n                                break;\n                            case "\xc3\xad":\n                                System.out.println("Typed accented i");\n                                break;\n                            case "\xc3\xb3":\n                                System.out.println("Typed accented o");\n                                break;\n                            case "\xc3\xba":\n                                System.out.println("Typed accented u");\n                                break;\n                            default:\n                                System.out.println("Typed other key " + event.getCode());\n                                break;\n                            }\n                        }\n\n                    });\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

祝你好运!

\n