由于仅贴出代码,供有缘人参考。

import java.awt.AlphaComposite;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JComponent;
import javax.swing.Timer;

public abstract class Page extends JComponent implements ActionListener{
    private static final long serialVersionUID = -1071441396934207094L;

    // 帧总量
    private static final int FRAMES_COUNT=10;  

    // Timer的时间间隔
    private static final int INTERVAL=50;  

    // 定时器
    private Timer timer;

    // 每次递增或递减的值
    private int offset=0;

    //帧索引
    private int frameIndex; 

    public void paint(Graphics g){
        if(isTimerRunning()){
            //根据当前帧显示当前透明度的内容组件
            float alpha=(float)frameIndex/(float)FRAMES_COUNT;
            Graphics2D g2d=(Graphics2D)g;
            g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha));
            //Renderer渲染机制
            super.paint(g2d);
        }else{
            super.paint(g);
        }
    }  

    @Override
    public void actionPerformed(ActionEvent e) {
        //前进一帧
        frameIndex+=offset;
        if(frameIndex>=FRAMES_COUNT || frameIndex<=0){
            //最后一帧,关闭动画
            closeTimer();
        }
        else{
            //更新当前一帧
            repaint();
        }
    }

    // 淡出
    public boolean fadeOut(){
        offset=-1;
        frameIndex=FRAMES_COUNT;

        timer=new Timer(INTERVAL,this);
        timer.start();

        return true;
    }

    // 淡入
    public boolean fadeIn(){
        offset=1;
        frameIndex=0;

        timer=new Timer(INTERVAL,this);
        timer.start();

        return true;
    }

    // 关闭定时器
    protected void closeTimer(){
        if(isTimerRunning()){
            timer.stop();
            timer=null;
        }

    }

    // 判断定时器是否处于工作状态
    public boolean isTimerRunning(){
        return timer!=null && timer.isRunning();
    }
}

最新文章

  1. Js杂谈-DOM
  2. eclipse maven 插件 安装 和 配置
  3. 【转】将datatable数据转化成list
  4. json 数组转换为js数组
  5. HDU1022 Train Problem I 栈的模拟
  6. 一类最小割bzoj2127,bzoj2132 bzoj3438
  7. Shell中的${},##和%%的使用
  8. sql 查询一段时间内某个时间点数据
  9. PyQt5环境搭建及cx_freeze打包exe
  10. nmcli命令大集合
  11. Lua中使用状态机FSM简单例子
  12. libRTMP使用说明
  13. windows server 简化设置
  14. python3-元类
  15. Tomcat 8默认工具manager管理页面访问配置
  16. Java中关于CountDownLatch的使用
  17. OpenStack中的虚拟机(/dev/mapper/centos-root)进行磁盘扩容
  18. Cakephp中使用JavaScriptHelper来引入js文件
  19. linux下添加用户并赋予root权限
  20. java基础-BigDecimal类常用方法介绍

热门文章

  1. undefined symbol: _ZNSt8ios_base4InitD1
  2. [mysql] 删除唯一约束unique
  3. thinkphp之自动完成
  4. webpack配置点记录
  5. json_decode转码无效
  6. 2017 Hackatari Codeathon B. 2Trees(深搜)(想法)
  7. ProxyStrike运行bug解决办法
  8. MySort
  9. java面试笔试总结(一)--亲生经历的面试题
  10. Activity(活动)的启动模式