使用JtabbedPane实现Sina网页中Tab风格

    欧洲杯刚刚硝烟散尽,每天都在新浪体育上关注各支球队的动向,同时也被那清新的网页风格所吸引,可能由于职业的敏感性(程序员),我马上想到是否可以用Swing来实现这中风格的网页外观呢。有人可能觉得我这是在痴人说梦,Swing就是以外观丑陋而闻名的阿!没错,我不否认Swing默认的外观风格的确不咋的,甚至有点惨目忍睹,但是它提供的可扩展性也是其他外观框架所难以比拟的,下面我就来一步一步展示我的挑战的过程:

首先来抓一张Sina网页的截图:

再来SHOW一下我的模仿的截图:

使用JtabbedPane实现Sina网页中Tab风格_第1张图片insert line

 

具体颜色没怎么调,贵在神似阿 呵呵
下面简要说一下自定义这种 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更美丽!!

点击这里下载

你可能感兴趣的:(框架,UI,swing,扩展,体育,jcomponent)