tabPane.getTabs().remove(tab) 不调用监听器
tabPane.getTabs().remove(tab) doesn't call listener
我已经 reading this Whosebug post。他们说 tabPane.getTabs().remove(tab)
不会在关闭标签页的事件中触发侦听器,这是有道理的。
因此,我将他们的解决方案应用到我的问题中(我理解原理,但不是真正的代码),但我的监听器永远不会被调用。方法 closeTab
的 tabPane.getTabs().remove(tab)
和 closeTab(tab)
都不是这样定义的:
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.");
}
});
}
您可能希望在您的方法中使用 getOnCloseRequest
而不是 getOnClosed
closeTab
:
EventHandler<Event> handler = tab.getOnCloseRequest();
handler.handle(null);
tab.getTabPane().getTabs().remove(tab);
None 这些方法(在这个 post 中的其他当前答案中,或者在您链接的原始 post 中)对我来说真的很有意义。可能我不明白你在做什么。
如果您想要响应被删除的选项卡,无论是通过用户单击选项卡关闭按钮删除,还是通过操作选项卡窗格的选项卡列表以编程方式删除,通常的方法是注册一个侦听器选项卡列表:
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.");
}
}
}
});
我已经 reading this Whosebug post。他们说 tabPane.getTabs().remove(tab)
不会在关闭标签页的事件中触发侦听器,这是有道理的。
因此,我将他们的解决方案应用到我的问题中(我理解原理,但不是真正的代码),但我的监听器永远不会被调用。方法 closeTab
的 tabPane.getTabs().remove(tab)
和 closeTab(tab)
都不是这样定义的:
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.");
}
});
}
您可能希望在您的方法中使用 getOnCloseRequest
而不是 getOnClosed
closeTab
:
EventHandler<Event> handler = tab.getOnCloseRequest();
handler.handle(null);
tab.getTabPane().getTabs().remove(tab);
None 这些方法(在这个 post 中的其他当前答案中,或者在您链接的原始 post 中)对我来说真的很有意义。可能我不明白你在做什么。
如果您想要响应被删除的选项卡,无论是通过用户单击选项卡关闭按钮删除,还是通过操作选项卡窗格的选项卡列表以编程方式删除,通常的方法是注册一个侦听器选项卡列表:
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.");
}
}
}
});