JavaSwing也惊艳之一:水晶之恋2011-06-19 BlogJava 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 bodyg2d.setColor(color);GradientPaint paint = new GradientPaint(x,y,color.darker(),x,y + size,color.brighter().brighter());g2d.setPaint(paint);g2d.fill(body);//draw imageg2d.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);