JavaSwing也惊艳之一:水晶之恋 - 编程入门网
HighlightShape(centerX, centerY, radius);
g2d.setColor(new Color(255, 255, 255, 150));
g2d.fill(highlightArea);
JavaSwing也惊艳之一:水晶之恋(3)时间:2011-06-19 BlogJava Swing唯一略有不同的部分是,水晶球的高亮区域要用两个圆形拼切: private static Shape createHighlightShape(int centerX, int centerY, int radius) { double myRadius = radius * 0.8; double x = centerX - myRadius; double y1 = centerY - myRadius - myRadius / 5; double y2 = centerY - myRadius - myRadius / 5 * 2; Ellipse2D.Double circle1 = new Ellipse2D.Double(x, y1, myRadius * 2, myRadius * 2); Ellipse2D.Double circle2 = new Ellipse2D.Double(x, y2, myRadius * 2, myRadius * 2); Area area = new Area(circle1); area.intersect(new Area(circle2)); return area; } 运行效果如下: 如果再来点儿循环、随机大小、随机位置、随机颜色,就可以做出绚丽的“ 吹肥皂泡”的效果 然后,用这些Icon创建一些按钮并显示: 四、融入Swing组件 以上例子仅使用了Java2D进行绘图。在实际使用中,需要将这些效果应用 的Swing组件中,例如按钮等。一个简单的方式是:将以上图形效果在内存中生 成内存图片并封装到一个ImageIcon中,然后将ImageIcon图标作为JButton的图 标进行显示。 public static Image createImageIcon(Image phantom, int size) { BufferedImage bi = new BufferedImage(size, size, BufferedImage.TYPE_INT_ARGB); Graphics2D g2d = bi.createGraphics(); g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); int center = size / 2; int radius = center; //此处进行画图 g2d.dispose(); return bi; } JavaSwing也惊艳之一:水晶之恋(4)时间:2011-06-19 BlogJava Swing然后,用这些Icon创建一些按钮并显示: public static void main(String[] args) throws Exception { JFrame frame = new JFrame(); frame.getContentPane().setLayout(new FlowLayout()); frame.getContentPane().add(new JButton("按钮1", new ImageIcon(createImageIcon(null, 60)))); frame.getContentPane().add(new JButton("按钮2", new ImageIcon(createImageIcon(null, 60)))); frame.getContentPane().add(new JButton("按钮3", new ImageIcon(createImageIcon(null, 60)))); frame.getContentPane().add(new JButton("使用Java2D创建的立体水 晶风格的按钮", new ImageIcon(createImageIcon(null, 30)))); frame.setSize(500, 300); frame.setTitle("Java也惊艳"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); TWaverUtil.centerWindow(frame); frame.setVisible(true); } 效果如下图: 本例子没有使用Look And Feel。你也可以使用JGoodies来美化一下,效果肯 定更好。 五、总结 可以看出,画出这类立体水晶效果并不难,只需仔细观察这些效果的光学细 节,并用Java2D的API来实现即可。这些例子稍作改进,就可以用来绘制JButton 等Swing组件,并用在实际项目中。或者,也可以应用这些技巧来做一些复杂图 形界面,如在TWaver中做出的网络拓扑图效果: 本文知识要点: n 渐变填充:这个使用GradientPaint就行了; n 使用Clip:类似蒙版/剪切的Java2D技术。看看Graphics的 setClip函数就明白了; n Area的使用:主要是Area的相交、合并等几个常见图形处理手法 。详细请看java.awt.geom.Area |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |