Ein*_*son 5 java javafx javafx-2
我使用带有内容可编辑主体的 WebView 作为 JavaFX 中的富文本编辑器。它工作正常,但我需要监听按键。它适用于输入键和 ASCII 字符,但重音字符(如冰岛语 \xc3\xa1 和 \xc3\xa9)不会触发任何事件。我尝试了 KeyEvent.KEY_PRESSED 和 KeyEvent.KEY_TYPED,但它们都不会触发重音字符。
\n\nInputMethodEvent 确实会触发重音字符,但如果我为此设置一个侦听器,它似乎会自动消耗该事件,并且不会到达编辑器。
\n\n有人知道在键入重音字符时监听事件而不消耗它们的方法,或者知道一种不消耗 InputMethodEvent 中的字符的方法吗?
\n您可以使用Node.addEventHandler方法将 KeyEvent EventHandler 添加到任何 Node(在本例中为 WebView),如果您处理 EventType KeyEvent.KEY_TYPED ,则可以使用KeyEvent.getCharacter方法获取键入的unicode字符。看这个例子:
\n\nWebView 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 });\nRun Code Online (Sandbox Code Playgroud)\n\n如果您想比较不同的字符串,忽略语言环境、大写、小写等,您可能需要查看Collat or 类。如果您想将“\xc3\xa1”和“a”视为相等,它可能会很有用。
\n\n祝你好运!
\n