以编程方式打开 JavaFX 虚拟键盘
Open JavaFX virtual keyboard programmatically
我已经部分解决了以下问题:JavaFX WebView / WebEngine show on-screen-keyboard automatically for each text input
我卡在了第 6 点,因为我想使用内置的 JavaFX 虚拟键盘,但我找不到任何参考如何触发它的显示。
你知道解决这个问题的方法吗?如果可能的话,我不想使用第 3 方库。
我要回答我的问题,因为我找到了解决方案。
首先,我在页面加载后为网页上的所有输入标签添加了一个事件监听器:
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 class 不是 API,因此我们在所有情况下都会收到一条警告消息,但它没有任何错误。
Discouraged access: The type 'FXVK' is not API (restriction on required library 'C:\Program Files\Java\jre1.8.0_91\lib\ext\jfxrt.jar')
我已经部分解决了以下问题:JavaFX WebView / WebEngine show on-screen-keyboard automatically for each text input
我卡在了第 6 点,因为我想使用内置的 JavaFX 虚拟键盘,但我找不到任何参考如何触发它的显示。
你知道解决这个问题的方法吗?如果可能的话,我不想使用第 3 方库。
我要回答我的问题,因为我找到了解决方案。
首先,我在页面加载后为网页上的所有输入标签添加了一个事件监听器:
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 class 不是 API,因此我们在所有情况下都会收到一条警告消息,但它没有任何错误。
Discouraged access: The type 'FXVK' is not API (restriction on required library 'C:\Program Files\Java\jre1.8.0_91\lib\ext\jfxrt.jar')