Swing容器组件的显示效果

其实有很多用户界面效果在Swing中是相当容易实现的。前面曾谈到过淡入淡出式弹出Swing Popup窗口,其实对于任何Swing容器组件而言都可以实现这一功能。使用Renderer渲染机制,在容器的paint方法中设置图形对象的透明属性,就可以实现Swing容器组件自身和子组件的透明渲染。如果再将这个过程渐变化,就能实现容器显示淡入淡出效果。

创新互联网站建设提供从项目策划、软件开发,软件安全维护、网站优化(SEO)、网站分析、效果评估等整套的建站服务,主营业务为成都网站建设、网站建设,成都APP应用开发以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。创新互联深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

本文的演示使用下面几行代码就实现了容器显示的淡入淡出效果:

 
 
 
  1. /**  
  2.  * 淡入淡出式显示内容组件的容器  
  3.  * @author William Chen  
  4.  */  
  5. public class GlassBox extends JComponent implements ActionListener{  
  6.     //常数定义  
  7.     private static final int ANIMATION_FRAMES=50;  
  8.     private static final int ANIMATION_INTERVAL=10;  
  9.     //帧索引  
  10.     private int frameIndex;  
  11.     //时钟  
  12.     private Timer timer;  
  13.      
  14.     /** Creates a new instance of GlassBox */  
  15.     public GlassBox() {  
  16.     }  
  17.      
  18.     public void paint(Graphics g){  
  19.         if(isAnimating()){  
  20.             //根据当前帧显示当前透明度的内容组件  
  21.             float alpha=(float)frameIndex/(float)ANIMATION_FRAMES;  
  22.             Graphics2D g2d=(Graphics2D)g;  
  23.             g2d.setComposite(AlphaComposite.getInstance
    (AlphaComposite.SRC_OVER, alpha));  
  24.             //Renderer渲染机制  
  25.             super.paint(g2d);  
  26.         }else{  
  27.             //如果是***次,启动动画时钟  
  28.             frameIndex=0;  
  29.             timer=new Timer(ANIMATION_INTERVAL, this);  
  30.             timer.start();  
  31.         }  
  32.     }  
  33.     //判断当前是否正在进行动画  
  34.     private boolean isAnimating(){  
  35.         return timer!=null && timer.isRunning();  
  36.     }  
  37.     //关闭时钟,重新初始化  
  38.     private void closeTimer() {  
  39.         if(isAnimating()){  
  40.             timer.stop();  
  41.             frameIndex=0;  
  42.             timer=null;  
  43.         }  
  44.     }  
  45.     //动画时钟处理事件  
  46.     public void actionPerformed(ActionEvent e) {  
  47.         //前进一帧  
  48.         frameIndex++;  
  49.         if(frameIndex>=ANIMATION_FRAMES)  
  50.             //***一帧,关闭动画  
  51.             closeTimer();  
  52.         else//更新当前一帧  
  53.             repaint();  
  54.     }  
  55. }  

将GlassBox类作为JFrame的ContentPane就能实现窗口内容显示的淡入淡出效果。GlassBox更常见的使用方式是作为普通容器,放在应用程序的任何地方。本文附带的演示程序是将GlassBox是作为普通容器加入JFrame的ContentPane内的。

Swing灵活强大的扩展和自定义功能得益于其优秀的模型和架构设计。如果程序是仅局限于用几个Label和Button等堆砌起来的简单应用,你很难体会到Swing容器组件的优点,反而会因为它的灵活复杂觉得它不如SWT等编写简单。然而在你面对现实应用中的复杂、灵活多变的界面需求时,Swing的能力就逐步显现了出来了。

标题名称:Swing容器组件的显示效果
链接URL:http://www.shufengxianlan.com/qtweb/news17/493467.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联