我正在尝试将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,并且上述代码将不起作用。因此我的问题是:是否存在某种渲染后事件?
提前多多感谢。答案 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();
}
});
}
});
希望这有帮助,因为没有尝试自己。