欧洲杯刚刚硝烟散尽,每天都在新浪体育上关注各支球队的动向,同时也被那清新的网页风格所吸引,可能由于职业的敏感性(程序员),我马上想到是否可以用Swing来实现这中风格的网页外观呢。有人可能觉得我这是在痴人说梦,Swing就是以外观丑陋而闻名的阿!没错,我不否认Swing默认的外观风格的确不咋的,甚至有点惨目忍睹,但是它提供的可扩展性也是其他外观框架所难以比拟的,下面我就来一步一步展示我的挑战的过程:
首先来抓一张Sina网页的截图:
再来SHOW一下我的模仿的截图:
具体颜色没怎么调,贵在神似阿
呵呵
下面简要说一下自定义这种
Tab
的关键点:
1.
每个
JComponent
几乎都有其
UI
委托对象类,当然
JTabbedPane
也不例外。我们首先继承
BasicTabbedPaneUI
类,这其中有我们必须要重写的一个方法,具体形式如下:
public
static
ComponentUI createUI(JComponent c) {
return new XXXTabbedPaneUI();
}
其中
XXXTabbedPaneUI
就是自己实现的
BasicTabbedPaneUI
的子类的名字。
2
.下面类出几个改变外观的重要的方法:
a.
protected
void
installDefaults()
//
可以改变一些
BasicTabbedPaneUI
中默认的属性。
b.
protected
void
paintTabArea(Graphics g,
int
tabPlacement,
int
selectedIndex)
//
绘制整个选项卡区域
c.
protected
void
paintTabBackground(Graphics g,
int
tabPlacement,
int
tabIndex,
int
x,
int
y,
int
w,
int
h,
boolean
isSelected)
//
绘制某个选项卡的背景色
d.
protected
void
paintContentBorder(Graphics g,
int
tabPlacement,
int
selectedIndex)
//
绘制
TabbedPane
容器的四周边框样式
。
e.
protected
void
paintFocusIndicator(Graphics g,
int
tabPlacement,
Rectangle[] rects,
int
tabIndex, Rectangle iconRect,
Rectangle textRect,
boolean
isSelected)
//
绘制选中某个
Tab
后,获得焦点的样式。
3.
默认状态下每个选择项卡是连续摆放的,那么我们怎么使得他像新浪网页里那样的
Tab
中间有一定间隙呢,那么我们还定义一个内部类继承
BasicTabbedPaneUI
的内部类
TabbedPaneLayou
重写
calculateTabRects
方法,因为具体的选项卡标签位置是由变量
rects
所决定的。
根据上面的介绍是不是你也想自己动手实践一下呢??那还等什么,让我们共同努力让Swing更美丽!!
点击这里下载