以编程方式打开JavaFX虚拟键盘

以编程方式打开JavaFX虚拟键盘,javafx,webview,virtual-keyboard,Javafx,Webview,Virtual Keyboard,我已经部分解决了以下问题: 我在第六点时结巴了,因为我想使用内置的JavaFX虚拟键盘,但我找不到任何参考资料,如何触发它的显示 你知道有什么解决办法吗?如果可能,我不想使用第三方库。我将回答我的问题,因为我找到了解决方案 首先,在页面加载后,我为网页上的所有输入标记添加了一个事件侦听器: private void addEventListenersToDOM() { webview.getEngine().getLoadWorker().stateProperty().addListe

我已经部分解决了以下问题:

我在第六点时结巴了,因为我想使用内置的JavaFX虚拟键盘,但我找不到任何参考资料,如何触发它的显示


你知道有什么解决办法吗?如果可能,我不想使用第三方库。

我将回答我的问题,因为我找到了解决方案

首先,在页面加载后,我为网页上的所有输入标记添加了一个事件侦听器:

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);
            }
        }
    });
}
注意:FXVK类不是API,所以我们在所有情况下都会收到一条警告消息,但它工作时没有任何错误

不鼓励访问:类型“FXVK”不是API(对所需库“C:\Program Files\Java\jre1.8.0\u 91\lib\ext\jfxrt.jar”的限制)

public class JavaFXVirtualKeyboard {

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

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