JavaFX - 从TabPane中删除Tab不会触发setOnClosed()回调

Dam*_*ien 1 javafx javafx-8

我想在setOnClosedJavaFX Tab 的回调中执行代码.但是,当我从TabPane中删除Tab时:

TabPane rootTabPane;
rootTabPane.getTabs().remove(tab1);
Run Code Online (Sandbox Code Playgroud)

在选项卡的控制器中,永远不会执行回调:

tab1.setOnClosed(event -> timerStop());
Run Code Online (Sandbox Code Playgroud)

通过鼠标单击关闭选项卡时,将运行回调,但不会在代码中删除选项卡时运行回调.

如何关闭代码中的选项卡以便调用回调?我有许多选项卡具有非常不同的行为,并希望使用通用方法.

谢谢!

fab*_*ian 5

TAB_CLOSED如果关闭标签作为用户交互的结果时才会触发事件.以编程方式删除Tab不会触发此事件,但没有什么可以阻止您自己触发它:

public static void removeTabWithEvent(Tab tab) {
    tab.getTabPane().getTabs().remove(tab);
    Event closedEvent = new Event(tab, tab, Tab.CLOSED_EVENT);
    Event.fireEvent(tab, closedEvent);
}
Run Code Online (Sandbox Code Playgroud)

  • @Sedrick No:一个`Tab`允许你检索它显示的`TabPane`,这个方法只是从显示它的`TabPane`中删除了标签.当然你可以将`TabPane`作为单独的参数传递,但这不是必需的,这样你实际上可以防止一些错误,如果你正在使用多个`TabPane'... BTW:`rootTabPane`是`TabPane `并且不包含`getTabPane`方法. (2认同)