百度空间 | 百度首页 
 
查看文章
 
转载:JavaSwing也惊艳之一:水晶之恋(二)
2009-02-20 14:10

四、融入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;
}

然后,用这些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来美化一下,效果肯定更好。

五、总结

可以看出,画出这类立体水晶效果并不难,只需仔细观察这些效果的光学细节,并用Java2DAPI来实现即可。这些例子稍作改进,就可以用来绘制JButtonSwing组件,并用在实际项目中。或者,也可以应用这些技巧来做一些复杂图形界面,如在TWaver中做出的网络拓扑图效果:

本文知识要点:

n         渐变填充:这个使用GradientPaint就行了;

n         使用Clip:类似蒙版/剪切的Java2D技术。看看GraphicssetClip函数就明白了;

n         Area的使用:主要是Area的相交、合并等几个常见图形处理手法。详细请看java.awt.geom.Area类;

n         生成内存图片:主要是BufferedImage类的使用;

如果大家感兴趣,可以尝试用上述Java2D技巧实现下图效果:

以上内容转载请注明

类别:it点滴 | 添加到搜藏 | 浏览() | 评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu