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();
}
});