0

Web エンジンの状態のリスナーを使用していますが、正常に動作しています。また、状態が SUCCEEDED に達したため、この時点でドキュメントが入力されます。

状態リスナー:

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

}

私の問題は、トグル ボタンで別のリスナーを使用することです。これは、Web エンジンのドキュメント モデルがまだ設定されていない場合に、(別のビューのコンストラクターで) メソッド selectToggle() によって手動で起動します。 JavaFX ステージがポップアップする前に状態 SUCCEED に到達しないため、状態リスナー。

だから今、UIがレンダリングされたときにJavaFXステージでリッスンする方法が必要です。この時点で State リスナーが反応し、その後 setInitialState() メソッドを呼び出して、Web エンジンのドキュメント モデルを操作できるからです。

ToggleButton を選択するコード:

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

1 に答える 1

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();  
    }
});
于 2016-04-07T18:34:24.770 に答える