JavaFX - доступ к модели DOM WebEngine

Я использую слушатель для состояния веб-движка, и он работает нормально. Также документ заполнен в это время, потому что государство УСПЕШНО достигнуто.

Государственный слушатель:

public class WebViewListener implements ChangeListener<Worker.State> {
   public void changed(ObservableValue observable, State oldState, State newState) {
      if (newState == State.SUCCEEDED) {
         String style = "";

         try {
            style = cssModel.getRuntimeCSSFileAsString();
            htmlModel.setDocument(view.getWebEngine().getDocument());
            htmlModel.setStyleAttribute(style);
         } catch (IOException e) {
            e.printStackTrace();
         } catch (HTMLDocumentNullException e) {
            e.printStackTrace();
         }
    }
}

}

Моя проблема в том, что я использую другой слушатель на кнопке переключения, которую я вручную запускаю методом selectToggle () в более раннее время (в конструкторе другого представления), где модель документа веб-движка еще не установлена слушатель состояния, потому что состояние SUCCEED не достигнуто до появления этапа JavaFX.

Так что теперь мне нужно решение, как я могу слушать на сцене JavaFX, когда визуализируется пользовательский интерфейс. Потому что в это время слушатель State реагирует, и после этого я могу вызвать метод setInitialState() и работать с моделью документов веб-движка.

Код выбора ToggleButton:

public void setInitialState() {
   screenGroup.selectToggle(rbMasterScreen);
   elementGroup.selectToggle(btnButton);
}

1 ответ

В этом случае самое примитивное решение: введите свойство SimpleBoolean, например:

SimpleBooleanProperty webEngineLoadedProperty = new SimpleBooleanProperty(false);

Тогда в конце:

public void changed(ObservableValue observable, State oldState, State newState) {
    if (newState == State.SUCCEEDED) {
        ...
        webEngineLoadedProperty.set(true);
    }
}

И послушайте изменения:

webEngineLoadedProperty.addListener(new ChangeListener<Boolean>() {

    @Override
    public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
        setInitialState();  
    }
});
Другие вопросы по тегам