2016-04-07 13 views
0

Web motorunun durumu için bir dinleyici kullanıyorum ve iyi çalışıyor. Ayrıca belge şu anda doldurulur, çünkü BAŞARILI Devlete ulaşılır.JavaFX - WebEngine'nin DOM Modeline Erişim

Devlet Dinleyici:

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

}

Sorunum içinde (elle önceki bir zamanda yönteme selectToggle() tarafından ateş bir değiştirme düğmesi, başka dinleyici kullanmak yani, Web motorunun belge modelinin henüz devlet dinleyicisi tarafından ayarlanmadığı başka bir görünümün kurucusu), çünkü JavaFX aşaması gelmeden önce SUCCEED durumuna ulaşılmaz.

Şimdi UI oluşturulduğunda JavaFX Stage'de nasıl dinleyebileceğimi bir çözüme ihtiyacım var. Çünkü şu anda, Devlet dinleyicisi tepki veriyor ve bundan sonra setInitialState() Yöntemini çağırabilir ve web motorunun belge modeliyle çalışabilirim.

ToggleButton seçme kodu: Bu durumda

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

Ne yapmak istiyorsun anlamıyorum. Eyalet'e dinlerseniz, belgenin null olması nasıl mümkün olabilir? Ve ne ToggleButton ile? Veya bir kod örneği yayınlayın, aksi halde yardım etmek gerçekten zor. – DVarga

cevap

0

En ilkel çözeltisi: örneğin SimpleBoolean özelliği tanıtmak

SimpleBooleanProperty webEngineLoadedProperty = new SimpleBooleanProperty(false); 

Sonra sonunda:

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

Ve değişim dinlemek:

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

    @Override 
    public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) { 
     setInitialState(); 
    } 
});