首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JavaFX -在TabPane中动态关闭选项卡

JavaFX -在TabPane中动态关闭选项卡
EN

Stack Overflow用户
提问于 2013-06-11 22:44:50
回答 2查看 15.4K关注 0票数 10

我有一个带有可关闭标签的TabPane。我想在用户单击选项卡内容中的一个按钮时触发一个"close tab event“。下面是用户单击按钮时调用的方法:

代码语言:javascript
运行
复制
public class CustomTab extends Tab {

    ...

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

    ....
}

我将此自定义选项卡添加到选项卡窗格中,如下所示:

代码语言:javascript
运行
复制
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);

通常,可以通过单击选项卡头中的(默认)关闭图标和" closed !“来关闭选项卡。打印到屏幕上。但是,当用户单击按钮(即在选项卡内容中)并调用CustomTabclose()方法时,"Closed!“会打印到屏幕上,但这次不会关闭选项卡。是不是很奇怪?

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

附言:tabPane.getTabs().remove(制表符)可以工作,但触发相应的事件要优雅得多。它还应该关闭选项卡。

EN

回答 2

Stack Overflow用户

发布于 2014-01-09 22:29:32

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

代码语言:javascript
运行
复制
private void closeTab(Tab tab) {
        EventHandler<Event> handler = tab.getOnClosed();
        if (null != handler) {
            handler.handle(null);
        } else {
            tab.getTabPane().getTabs().remove(tab);
        }
    }

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

票数 13
EN

Stack Overflow用户

发布于 2014-04-01 19:04:03

我为此打开了一个feature request

同时,如果您使用的是Java8,并且不使用自定义TabPane皮肤,则可以使用此变通方法来模拟单击close按钮时发生的关闭行为:

代码语言:javascript
运行
复制
import javafx.scene.control.Tab;

import com.sun.javafx.scene.control.behavior.TabPaneBehavior;
import com.sun.javafx.scene.control.skin.TabPaneSkin;

public class MyTab extends Tab {

    public void requestClose() {
        TabPaneBehavior behavior = getBehavior();
        if(behavior.canCloseTab(this)) {
            behavior.closeTab(this);
        }
    }

    private TabPaneBehavior getBehavior() {
        return ((TabPaneSkin) getTabPane().getSkin()).getBehavior();
    }
}
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17047000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档