4

JavaFX のリッチ テキスト エディターとして contenteditable ボディを持つ WebView を使用しています。正常に動作していますが、キーの押下をリッスンする必要があります。これはエンター キーと ASCII 文字に対して機能しますが、アクセント付きの文字 (アイスランドの á や é など) はイベントを発生させません。KeyEvent.KEY_PRESSED と KeyEvent.KEY_TYPED を試しましたが、どちらもアクセント付きの文字に対して発火しませんでした。

InputMethodEvent はアクセント付きの文字に対して発火しますが、そのためのリスナーをセットアップすると、自動的にイベントを消費するように見え、エディターに到達しません。

アクセント付きの文字が入力されたときにそれらを消費しないイベントをリッスンする方法、または InputMethodEvent で文字を消費しない方法を知っている人はいますか?

4

1 に答える 1

1

Node.addEventHandlerメソッドを使用して任意のノード (この場合は WebView) に KeyEvent EventHandler を追加できます。また、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 に答える