能用纯Swing实现Notepad++这样的选项卡效果么?

1、Swing中默认的JTabbedPanel特性给我带来的苦恼

[img]http://dl.iteye.com/upload/attachment/254315/5b3e86a8-d932-30d3-9ffb-abde2dcd666e.jpg[/img]

2、如何实现Notepad++这样的TabbedPanel效果?

[img]http://dl.iteye.com/upload/attachment/254319/3a7d5ad8-8680-3fd2-bc39-f7606dac1c4c.jpg[/img]

其实不仅在Notepad++,在VS的代码编辑区域也有这样的效果:

[img]http://dl.iteye.com/upload/attachment/254327/b3fd73b9-04db-38e6-b2d1-14bc79ab2457.jpg[/img]

请教各位朋友如何实现这样的效果?谢谢!

JTabbedPane 提供

[code="java"]JTabbedPane(int tabPlacement, int tabLayoutPolicy) [/code]
创建一个空的 TabbedPane,使其具有指定的选项卡布局和选项卡布局策略。

[code="java"]public void setTabLayoutPolicy(int tabLayoutPolicy)[/code]设置在一次运行中不能放入所有的选项卡时,选项卡窗格使用的对选项卡进行布局安排的策略。

WRAP_TAB_LAYOUT
当在一次运行中不能放入所有的选项卡时,在多次运行中包装选项卡的选项卡布局策略。

[b]SCROLL_TAB_LAYOUT [/b][color=darkred][/color]
当在一次运行中不能放入所有的选项卡时,用于提供可用选项卡子集的选项卡布局策略。

当然可以实现,思路大致这样:继承TabbedPaneUI或BasicTabbedPaneUI,然后重写paint方法完成UI的绘制。再将此UI安装到对应的JTabbedPane上去。至于如何要你想要的效果,就要在绘制中计算选项卡标签的size和选项卡面板的size,当选项卡总宽度过宽时,在选项卡标签的右边增加两个滚动按钮。你可以看看WindowsTabbedPaneUI的源代码,看它是怎么绘制的。