将事件处理程序添加到选项卡上下文菜单会引发空指针异常



我想将事件处理程序添加到选项卡上下文菜单中。选择选项卡上下文菜单后,我想从节点中删除事件处理程序。问题是Tab2.getContextMenu().addEventHandler(Event.ANY,handler);抛出了一个NullPointerException.

@FXML Tab Tab2;- Tab2 可以在我的 fxml 中找到,fx:id="Tab2">

EventHandler<Event> handler = (new EventHandler<Event>() {
public void handle(Event event) {
System.out.println("Tab2 is selected!");
Tab2.getContextMenu().removeEventHandler(Event.ANY, this);
}
});
Tab2.getContextMenu().addEventHandler(Event.ANY, handler);

代码发生在initialize函数中。

我想实现这样的类似解决方案:

Tab2.setOnSelectionChanged(e -> {
if(Tab2.isSelected()) {
System.out.println("Tab2 is selected!");
}
});

不幸的是,使用此解决方案,它将始终在选择时运行。但我希望它只发生一次并删除事件侦听器。

这个提问者使用了与我类似的解决方案: 如何删除事件处理程序?

但他在添加事件处理程序方面没有问题。

编辑:

似乎getContextMenu((函数会导致空指针异常,而且似乎我也误解了该函数的作用。我想获取选项卡的"标题"。

但问题仍然是一样的。如何将事件侦听器添加到选项卡中,并在第一次选择后从中删除事件侦听器。就这样。

您可以将侦听器值设置为 null

例如:

tab1.setOnSelectionChanged((e)->{
if(tab1.isSelected()){
tab1.setOnSelectionChanged(null);
}
});

最新更新