65.9K
CodeProject 正在变化。 阅读更多。
Home

带关闭选项卡的 JTabbedPane

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.40/5 (11投票s)

2007 年 4 月 20 日

CPOL

2分钟阅读

viewsIcon

98469

downloadIcon

4042

本文介绍了一种简单的方法,可以在不深入研究 BasicTabbedPaneUI 的情况下实现关闭标签的功能。

Screenshot - closableTabs.png

引言

在开发新应用程序的过程中,几乎总是需要具有特定功能的组件,以满足项目需求或仅仅是为了使操作更加自然和舒适。因此,您将选择从现有组件扩展组件,或者从头开始创建组件。无论哪种情况,都可能给您带来很多麻烦,并使您暂时偏离开发的主要目标。一个这样的问题就是自定义选项卡窗格 (JTabbedPane),使其具有打开的选项卡关闭的功能。

您可以通过将按钮添加到选项卡内容来解决此问题,但这通常会与内容冲突,并且看起来一点也不美观,或者通过扩展选项卡窗格,将关闭按钮嵌入到每个选项卡的标题栏中。对于第二种选择,一个相对简单的解决方案是使用组件进行选项卡标题渲染。可以将该组件设置为每个选项卡 (setTabComponentAt(index, component )),并且需要实现它以显示标题和关闭按钮。

另一种解决方案是使用此 JTabbedPane 的扩展,它不仅添加了可关闭选项卡的功能,还提供了控制选项卡关闭事件的能力。

Using the Code

代码的使用非常简单;只需使用 ClosableTabbedPane 代替 JTabbedPane 即可。

// Implementation with close event handeling
public class TabFrame extends JFrame {
private ClosableTabbedPane tabbedPane;
    public TabFrame() {         
        tabbedPane = new ClosableTabbedPane() {
            public boolean tabAboutToClose(int tabIndex) {
                String tab = tabbedPane.getTabTitleAt(tabIndex);
                int choice = JOptionPane.showConfirmDialog(null, 
                   "You are about to close '" + 
                   tab + "'\nDo you want to proceed ?", 
                   "Confirmation Dialog", 
                   JOptionPane.INFORMATION_MESSAGE);
                return choice == 0;
                // if returned false tab
                // closing will be canceled
            }
        };
        getContentPane().add(tabbedPane);
        
}

// Simple implementation
public class TabFrame extends JFrame {
private ClosableTabbedPane tabbedPane;
    public TabFrame() {         
        tabbedPane = new ClosableTabbedPane() ;
        getContentPane().add(tabbedPane);
    }
}

在第一个实现中,您可以看到 ClosableTabbedPanetabAboutToClose(tabIndex) 函数被重写,以控制选项卡关闭事件。返回的 true/false 值指示是否应关闭选项卡。您可以在此处进行选项卡关闭前的处理。

如果您不需要控制关闭事件,只需使用第二个代码即可。

关注点

这个项目的有趣之处在于,它是在不深入研究选项卡窗格实现的情况下编写的,同时实现了所需的功能。

© . All rights reserved.