实现淡入淡出效果的组件,继承自JComponent
2024-09-27 23:12:16
由于仅贴出代码,供有缘人参考。
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(); } }
最新文章
- Js杂谈-DOM
- eclipse maven 插件 安装 和 配置
- 【转】将datatable数据转化成list
- json 数组转换为js数组
- HDU1022 Train Problem I 栈的模拟
- 一类最小割bzoj2127,bzoj2132 bzoj3438
- Shell中的${},##和%%的使用
- sql 查询一段时间内某个时间点数据
- PyQt5环境搭建及cx_freeze打包exe
- nmcli命令大集合
- Lua中使用状态机FSM简单例子
- libRTMP使用说明
- windows server 简化设置
- python3-元类
- Tomcat 8默认工具manager管理页面访问配置
- Java中关于CountDownLatch的使用
- OpenStack中的虚拟机(/dev/mapper/centos-root)进行磁盘扩容
- Cakephp中使用JavaScriptHelper来引入js文件
- linux下添加用户并赋予root权限
- java基础-BigDecimal类常用方法介绍