2016-04-07 21 views
0

Webエンジンの状態にリスナーを使用しています。正常に動作しています。 SUCCEEDED状態に達したため、この時点で文書が埋められます。JavaFX - WebEngineのDOMモデルへのアクセス

状態リスナ:

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

}

私の問題は、私は(I手動早い時点で方法selectToggle()によって発射トグルボタン、上の別のリスナーを使用すること、あります別のビューのコンストラクタ)、JavaFXステージがポップアップする前に状態SUCCEEDに達していないため、Webエンジンのドキュメントモデルが状態リスナによってまだ設定されていません。

これで、UIがレンダリングされるとき、JavaFXステージでどのように聴くことができるのか、解決策が必要です。この時点では、状態リスナーが反応し、その後、setInitialState()メソッドを呼び出して、Webエンジンのドキュメントモデルを操作できます。

トグルボタンを選択するコード:この場合

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

私は本当にあなたがしたい何をすべきか理解していません。 Stateを聞くと、ドキュメントがnullである可能性はありますか? 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(); 
    } 
}); 
関連する問題