2013-06-04 105 views
1

我想要一個click事件偵聽器添加到TableView中的所有列標題的標籤,如下所示:後期渲染事件的JavaFX

for (final Node header : tblView.lookupAll(".column-header > .label")) {   
    if ((header != null) && (header instanceof Label)) { 
     final Label headerLabel = (Label) header; 
     // ... 
    } 
} 

現在的問題是,如果我這樣做在Controller的initialize()函數中,Scenegraph還沒有被渲染,上面的代碼將不起作用。因此我的問題:是否有某種後渲染事件?

非常感謝提前。

回答

1

javafx.stage.WindowEventsWINDOW_SHOWN事件。這不是(imo)「發佈渲染事件」,但可以通過向Stage(從Window延伸)添加事件處理程序以類似的方式使用它。

在控制器類的初始化方法,獲得初級階段,那麼:

stage.addEventHandler(WindowEvent.WINDOW_SHOWN, new EventHandler<WindowEvent>() { 
    @Override 
    public void handle(WindowEvent window) { 
     Platform.runLater(new Runnable() { 
      @Override 
      public void run() { 
       addListenerToColumnHeaders(); 
      } 
     }); 
    } 
}); 

希望這會有所幫助,因爲沒有嘗試自己。

+0

此事件處理程序按預期工作,謝謝!但是,在主控制器的'initialize()'內部初始階段,我自己動手就是一個問題,因爲看起來......一個解決方案是抓住Main Class中的控制器,但是它將Application類和主控制器。 – dsd

+0

@Biy我的應用程序有很多控制器,我需要在某些UI流的中間做這個。當我添加WindowEvent.WINDOW_SHOWN事件處理程序時,它會嘗試執行這個事件處理程序,我已經聲明這意味着執行Application的開始(Stage方法),然後我得到了一些空指針異常。你能告訴我如何解決這個問題。謝謝。 – Channa

+0

@Channa,回答您的相關問題。請看一看。 –