在JavaFX中发布渲染事件

时间:2013-06-04 12:33:59

标签: javafx-2

我正在尝试将click事件侦听器添加到TableView的所有列标题的标签中,如下所示:

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

现在,问题是如果我在Controller的initialize()函数中执行此操作,则尚未呈现Scenegraph,并且上述代码将不起作用。因此我的问题是:是否存在某种渲染后事件?

提前多多感谢。

1 个答案:

答案 0 :(得分:1)

javafx.stage.WindowEvents中有WINDOW_SHOWN个事件。那不是(imo)“后期渲染事件”,但您可以通过向Stage(从Window扩展)添加事件处理程序,以类似的方式利用它。

在控制器类的initialize方法中,获取主要阶段,然后:

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

希望这有帮助,因为没有尝试自己。