快速业务通道

JavaSwing也惊艳之一:水晶之恋 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16

JavaSwing也惊艳之一:水晶之恋

时间:2011-06-19 BlogJava Swing

一、序言

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

二、立体水晶效果

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

JavaSwing也惊艳之一:水晶之恋 - 编程入门网

简单思路如下:先画矩形区域,然后画图标,然后设置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);

JavaSwing也惊艳之一:水晶之恋(2)

时间:2011-06-19 BlogJava Swing

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

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;
}

运行程序效果如下:

JavaSwing也惊艳之一:水晶之恋 - 编程入门网

三、更多变化

根据上面例子稍作形状变换,可以画出立体水晶球的按钮。

Color color = TWaverUtil.getRandomColor();
Ellipse2D.Double circle = new Ellipse2D.Double(centerX - radius, 

centerY - radius, radius * 2, radius * 2);
//draw body
g2d.setColor(color);
GradientPaint paint = new GradientPaint(centerX, centerY, color, 

centerX, centerY + radius * 2, color.brighter().brighter());
g2d.setPaint(paint);
g2d.fill(circle);
//draw image
g2d.setClip(circle);
Image image = TWaverUtil.getImage("/glass/" + i + 

".png");
g2d.drawImage(image,
centerX - image.getWidth(null) / 2,
                 centerY - image.getHeight(null) / 2,
                 null);
g2d.setClip(null);
//draw highlight.
Shape highlightArea = create

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号