2016-05-11 6 views
1

я частично решить следующую задачу: JavaFX WebView/WebEngine show on-screen-keyboard automatically for each text inputOpen JavaFX виртуальная клавиатура программно

Я stucked на 6-м пункте, потому что я хотел бы использовать встроенный в JavaFX виртуальной клавиатуры, но я не могу найти ссылку, как может вызвать его отображение.

Знаете ли вы какое-либо решение? Если возможно, я не хочу использовать стороннюю библиотеку.

ответ

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 \ вн \ jfxrt.jar')