2016-04-07 6 views
0

Я использую прослушиватель для состояния веб-движка, и он работает нормально. Кроме того, документ заполняется в это время, потому что достигнуто состояние SUCCEEDED.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, когда пользовательский интерфейс визуализируется. Потому что в это время реагирует слушатель штата, после чего я могу вызвать метод setInitialState() и работать с моделью документа веб-движка.

Код выбора ToggleButton:

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

Я действительно не понимаю, что вы хотите сделать. Если вы слушаете состояние, как возможно, что документ равен нулю? И что с ToggleButton? Или отправьте образец кода, в противном случае очень сложно помочь. – DVarga

ответ

0

В этом случае самый примитивный решение: Ввести 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(); 
    } 
});