【问题标题】:JavaFX KeyEvent and accented charactersJavaFX KeyEvent 和重音字符
【发布时间】:2013-02-20 16:20:27
【问题描述】:

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

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

有谁知道在输入重音字符时监听事件的方法不消耗它们,或者知道在 InputMethodEvent 中取消消耗字符的方法?

【问题讨论】:

  • 您使用哪个操作系统和 JavaFX 版本?

标签: java javafx-2 javafx


【解决方案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;
                            }
                        }

                    });

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

祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 2021-01-12
    相关资源
    最近更新 更多