带关闭选项卡的 JTabbedPane






3.40/5 (11投票s)
本文介绍了一种简单的方法,可以在不深入研究 BasicTabbedPaneUI 的情况下实现关闭标签的功能。
引言
在开发新应用程序的过程中,几乎总是需要具有特定功能的组件,以满足项目需求或仅仅是为了使操作更加自然和舒适。因此,您将选择从现有组件扩展组件,或者从头开始创建组件。无论哪种情况,都可能给您带来很多麻烦,并使您暂时偏离开发的主要目标。一个这样的问题就是自定义选项卡窗格 (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);
}
}
在第一个实现中,您可以看到 ClosableTabbedPane
的 tabAboutToClose(tabIndex)
函数被重写,以控制选项卡关闭事件。返回的 true/false
值指示是否应关闭选项卡。您可以在此处进行选项卡关闭前的处理。
如果您不需要控制关闭事件,只需使用第二个代码即可。
关注点
这个项目的有趣之处在于,它是在不深入研究选项卡窗格实现的情况下编写的,同时实现了所需的功能。