2

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

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

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

提前谢谢了。

4

1 回答 1

1

javafx.stage.WindowEvents中有一个WINDOW_SHOWN事件。这不是(imo)“发布渲染事件”,但您可以通过将事件处理程序添加到(从 扩展)以类似的方式使用它。StageWindow

在控制器类的初始化方法中,获取初级阶段,然后:

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

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

于 2013-06-04T15:28:07.247 回答