JavaSwing也惊艳之一:水晶之恋 - 编程入门网
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 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; } 运行程序效果如下: 三、更多变化 根据上面例子稍作形状变换,可以画出立体水晶球的按钮。 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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |