快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
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;
}

运行效果如下:

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

如果再来点儿循环、随机大小、随机位置、随机颜色,就可以做出绚丽的“ 吹肥皂泡”的效果

然后,用这些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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

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号