我一直在看这个stackoverflow帖子。他们说tabPane.getTabs().remove(tab)
不会在关闭选项卡的事件中触发侦听器,这是有意义的。
tabPane.getTabs().remove(tab)
也不是closeTab(tab)
,方法closeTab
定义如下:
private void closeTab(Tab tab) {
EventHandler<Event> handler = tab.getOnClosed();
if (null != handler) {
handler.handle(null);
} else {
tab.getTabPane().getTabs().remove(tab);
}
}
打电话给我的听众。但是,当我用鼠标关闭选项卡时,侦听器会被调用。
这是我的听众:
private static void addListenerOnClosingTab(Tab tab) {
tab.setOnCloseRequest(new EventHandler<Event>()
{
@Override
public void handle(Event arg0)
{
Util.loggerControllerDiagram.info("Tab " + tab.getText() + " closed.");
}
});
}
这些方法(在这篇文章的其他当前答案中,或者在你链接的原始帖子中)对我来说都没有意义。有可能我没有理解你想要做什么。
如果你想响应一个被删除的选项卡,不管它是通过用户点击选项卡关闭按钮被删除的,还是通过编程方式操作选项卡窗格的选项卡列表被删除的,通常的方法是用选项卡列表注册一个侦听器:
private TabPane tabPane ;
// ...
tabPane.getTabs().addListener((Change<? extends Tab> c) -> {
while (c.next()) {
if (c.wasRemoved()) {
for (Tab tab : c.getRemoved()) {
System.out.println("Tab " + tab.getText() + " closed.");
}
}
}
});
你可能想在你的方法closeTab
:
getOnCloseRequest
而不是getOnClosed
EventHandler<Event> handler = tab.getOnCloseRequest();
handler.handle(null);
tab.getTabPane().getTabs().remove(tab);