【问题标题】:Open JavaFX virtual keyboard programmatically以编程方式打开 JavaFX 虚拟键盘
【发布时间】:2016-09-07 06:06:34
【问题描述】:

我已经部分解决了以下问题:JavaFX WebView / WebEngine show on-screen-keyboard automatically for each text input

我停留在第 6 点,因为我想使用内置的 JavaFX 虚拟键盘,但我找不到任何参考如何触发它的显示。

您知道任何解决方案吗?如果可能的话,我不想使用 3rd 方库。

【问题讨论】:

    标签: javafx webview virtual-keyboard


    【解决方案1】:

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

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

    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(对所需库“C:\Program Files\Java\jre1.8.0_91\lib\ext\jfxrt.jar”的限制)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-06
      • 1970-01-01
      • 2015-01-02
      • 2021-11-28
      • 2017-07-16
      • 1970-01-01
      • 1970-01-01
      • 2013-05-04
      相关资源
      最近更新 更多