实现淡入淡出效果的组件,继承自JComponent

简介:

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

复制代码
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();  
    }  
}
复制代码

 














本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/xiandedanteng/p/3695268.html,如需转载请自行联系原作者



相关文章
|
4天前
|
人工智能 运维 安全
|
2天前
|
人工智能 异构计算
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
|
9天前
|
人工智能 JavaScript 测试技术
Qwen3-Coder入门教程|10分钟搞定安装配置
Qwen3-Coder 挑战赛简介:无论你是编程小白还是办公达人,都能通过本教程快速上手 Qwen-Code CLI,利用 AI 轻松实现代码编写、文档处理等任务。内容涵盖 API 配置、CLI 安装及多种实用案例,助你提升效率,体验智能编码的乐趣。
823 109
|
3天前
|
机器学习/深度学习 人工智能 自然语言处理
B站开源IndexTTS2,用极致表现力颠覆听觉体验
在语音合成技术不断演进的背景下,早期版本的IndexTTS虽然在多场景应用中展现出良好的表现,但在情感表达的细腻度与时长控制的精准性方面仍存在提升空间。为了解决这些问题,并进一步推动零样本语音合成在实际场景中的落地能力,B站语音团队对模型架构与训练策略进行了深度优化,推出了全新一代语音合成模型——IndexTTS2 。
420 9
|
3天前
|
人工智能 测试技术 API
智能体(AI Agent)搭建全攻略:从概念到实践的终极指南
在人工智能浪潮中,智能体(AI Agent)正成为变革性技术。它们具备自主决策、环境感知、任务执行等能力,广泛应用于日常任务与商业流程。本文详解智能体概念、架构及七步搭建指南,助你打造专属智能体,迎接智能自动化新时代。
|
4天前
|
机器学习/深度学习 传感器 算法
Edge Impulse:面向微型机器学习的MLOps平台——论文解读
Edge Impulse 是一个面向微型机器学习(TinyML)的云端MLOps平台,致力于解决嵌入式与边缘设备上机器学习开发的碎片化与异构性难题。它提供端到端工具链,涵盖数据采集、信号处理、模型训练、优化压缩及部署全流程,支持资源受限设备的高效AI实现。平台集成AutoML、量化压缩与跨硬件编译技术,显著提升开发效率与模型性能,广泛应用于物联网、可穿戴设备与边缘智能场景。
188 127