2016-05-11 19 views
1

私は部分的に次のような問題は解決している:私はJavaFXの仮想キーボードに内蔵されたが、私はトリガすることができますどのようにすべての参照を見つけることができませんを使用したいので、私は6日の時点でstucked JavaFX WebView/WebEngine show on-screen-keyboard automatically for each text inputオープンJavaFXの仮想キーボードプログラムで

をそれを表示する。

これにはどのような解決策がありますか?可能であれば、私はサードパーティのライブラリを使用したくありません。

答えて

1

私は解決策を見つけたので私は私の質問に答えるつもりです。

ページがロードされた後、私は、Webページ上のすべての入力タグのイベントリスナーを追加まず、:

private void addEventListenersToDOM() { 
    webview.getEngine().getLoadWorker().stateProperty().addListener(new ChangeListener<State>() { 
     @Override 
     public void changed(ObservableValue<? extends State> ov, State oldState, State newState) { 
      if (newState == State.SUCCEEDED) { 
       JSObject win = (JSObject) webview.getEngine().executeScript("window"); 
       win.setMember("javaFXVirtualKeyboard", new JavaFXVirtualKeyboard()); 

       String script = 
          "var inputsList = document.getElementsByTagName('input');" 
         + "for (var index = 0; index < inputsList.length; ++index) { " 
         +  "inputsList[index].addEventListener('focus', function() { javaFXVirtualKeyboard.show() }, false); " 
         +  "inputsList[index].addEventListener('focusout', function() { javaFXVirtualKeyboard.hide() }, false); " 
         + "}"; 
       webview.getEngine().executeScript(script); 
      } 
     } 
    }); 
} 

とキーポイント、私は表示と非表示キーボードをトリガーする方法:

public class JavaFXVirtualKeyboard { 

    public void show() { 
     FXVK.init(webview); 
     FXVK.attach(webview); 
    } 

    public void hide() { 
     FXVK.detach(); 
    } 
} 

注:FXVKクラスはAPIではないので、すべてのケースで警告メッセージが表示されますが、バグなく動作します。

落胆アクセス:

:型 'FXVKは、' API( '\プログラムファイル\のJava \ jre1.8.0_91 \ libに\ extに\ jfxrt.jar C' に必要なライブラリの制限)ではありません
関連する問題