javafx-2 - JavaFX - 动态关闭 TabPane 中的选项卡

标签 javafx-2 mouseevent tabpanel

我有一个带有可关闭选项卡的 TabPane。当用户单击选项卡内容中的按钮时,我想触发“关闭选项卡事件”。这是用户单击按钮时调用的方法:

public class CustomTab extends Tab {

    ...

    protected void close() {
        Event.fireEvent(this, new Event(Tab.CLOSED_EVENT));
    }

    ....
}

我将此自定义选项卡添加到 tabpane 中:

TabPane tabPane = new TabPane();
...
CustomTab tab = new CustomTab();
tab.setOnClosed(new EventHandler<Event>() {
    @Override
    public void handle(Event t) {
        System.out.println("Closed!");
    }
});
tabPane.getTabs().add(tab);
tabPane.getSelectionModel().select(tab);

通常,可以通过单击选项卡标题中的(默认)关闭图标和“关闭!”来关闭选项卡。被打印到屏幕上。但是,当用户单击按钮(位于选项卡内容中)并调用 CustomTabclose() 方法时,再次“关闭!”打印到屏幕上,但这次选项卡没有关闭。是不是很奇怪?

如何在单击任意按钮时关闭选项卡?

P.S.:tabPane.getTabs().remove(tab) 可以工作,但是触发相应的事件要优雅得多。它还应该关闭该选项卡。

最佳答案

仅使用 tabPane.getTabs().remove(tab) 的方法并不完全正确,因为它不会调用“onClosed”处理程序(如果设置)。 我正在使用以下方法:

private void closeTab(Tab tab) {
        EventHandler<Event> handler = tab.getOnClosed();
        if (null != handler) {
            handler.handle(null);
        } else {
            tab.getTabPane().getTabs().remove(tab);
        }
    }

如果未设置处理程序或调用“onClosed”处理程序,则会删除选项卡。

关于javafx-2 - JavaFX - 动态关闭 TabPane 中的选项卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17047000/

相关文章:

javafx-2 - 始终显示 JavaFX ListView 的垂直滚动条

javascript - 使用 touchstart 和/或单击(鼠标按下)Angular 6

javascript - 在 D3 中取消鼠标悬停在新创建的 DOM 元素上

JavaFX - 如何同步CustomTab(扩展Tab)和TabPane

javascript - 在 Ext JS 中将点击事件绑定(bind)到 Tab

java - 如何通过java更改任务栏图像?

java - 如何设置滚动 Pane 所需的位置?

java - 如何将 JVM 参数传递给使用 Inno Setup 创建的 native JavaFX 2 应用程序

javascript - 仅将事件应用于指向的元素而不是其子元素

javascript - 在Ajax选项卡面板的客户端点击事件上调用Javascript