当前位置导航:炫浪网>>网络学院>>编程开发>>JAVA教程>>Java进阶

Java Swing也惊艳之一:水晶之恋

    一、序言

    关于“Java做不好桌面”的争论已经由来已久。虽然Swing和Java2D已经有超过十年的历史,也有JIDE、JGoodies、TWaver等不少开源Swing组件,但是用Java做桌面程序仍然不是一件轻松的事。本《Java也惊艳》系列文章,就是想通过一些简单生动的例子,和大家一起认识Java、探索Swing.其实你只需要多一点创意、多一点耐心,你的Java程序也可以“惊艳”!本文就带您一起进入Java的“水晶之恋”。

    二、立体水晶效果

    受苹果公司的影响,现在立体水晶风格的界面非常流行。Java也可以吗?我们不妨先尝试一下用Java绘制一个立体水晶风格的按钮到底有多难。一个立体的水晶按钮应当有一个图标、一个圆角矩形区域、边框以及一些立体反光效果,如下图:

    简单思路如下:先画矩形区域,然后画图标,然后设置clip并画高亮反光区域,最后画外部边框。

    具体实现比较简单,主要代码如下:

Color color  =  TWaverUtil.getRandomColor(); 
 RoundRectangle2D body 
=   new  RoundRectangle2D.Float(x, y, size, size, size  /   3 , size  /   3
); 

// draw body 

g2d.setColor(color); 
GradientPaint paint 
=   new
 GradientPaint(x, 
                    y, 
                    color.darker(), 
                    x, 
                    y 
+
 size, 
                    color.brighter().brighter()); 
g2d.setPaint(paint); 
g2d.fill(body); 

// draw image 

g2d.setClip(body); 
Image image 
=  TWaverUtil.getImage( " /glass/ "   +  i  +   " .png "
); 
g2d.drawImage(image, 
               x 
+  (size  -  image.getWidth( null ))  /   2

               y 
+  (size  -  image.getHeight( null ))  /   2

               
null
); 
g2d.setClip(
null
); 

// draw highlight. 

Shape highlightArea  =  createHighlightShape(x, y, size, body); 
g2d.setColor(
new  Color( 255 255 255 150
)); 
g2d.fill(highlightArea); 

// draw outline. 

g2d.setColor(color.darkGray); 
g2d.draw(body);

    其中,对高亮区域的计算,可以用一个圆心在左上方的大圆形和矩形进行剪切:

private   static  Shape createHighlightShape( int  centerX,  int  centerY,  int  size, Shape body) { 
double  myRadius  =  size  *   4

  
double  x  =  centerX  -  size  *   2.3

  
double  y  =  centerY  -  size  *   3.2

  Ellipse2D.Double circle 
=   new
 Ellipse2D.Double(x, y, myRadius, myRadius); 
  Area area 
=   new
 Area(circle); 
  area.intersect(
new
 Area(body)); 
  
return
 area; 
}

    运行程序效果如下:

共4页 首页 上一页 1 2 3 4 下一页 尾页 跳转到
相关内容
赞助商链接