现在的位置: 首页 > 综合 > 正文

为鼠标点击事件添加全局效果处理

2018年01月30日 ⁄ 综合 ⁄ 共 993字 ⁄ 字号 评论关闭

 今天是昨天文章《使用Swing你只需要有足够的想像力》的延伸。不用说就是再多一点想像力,做一些eye-candy的东西。

    昨天文中的那个容器组件有个特点就是为鼠标事件添加了一个全局的事件处理,即mouseEntered和mouseExited。它们并不影响容器内组件的行为,只是为鼠标事件提供一个全局效果:焦点框滑动。
    由此延伸开来,可以想像为容器添加鼠标其他事件如mouseRleased的全局效果处理,当鼠标点击容器内任意一点时,该全局处理器添加除了组件缺省行为的其他效果。今天的演示组件就是这样一个简单的容器组件,它响应mouseRleased事件在鼠标点击处播放类似逐步扩散的彩虹效果:

    这个演示程序的类是dyno.swing.beans.ClickingEffectPane,其主要接口和普通JPanel一样,另外还有个设置animator的方法:
public void setAnimator(Animator animator)
    这个方法中的Animator是一个实现如下的接口的类:
public interface Animator {
    void init(Component pane);
    void paint(Component c, Graphics g, Point point, int index, int total);

    void destroy();
}

   其中init方法在每次动画之前调用,其中pane是该ClickingEffectPane组件,主要用来初始化。paint方法完成具体一帧效果的绘制。c是容器类本身,g是图像对象,point是点击的位置,index是当前的帧,total是总帧数。而destroy方法在此次动画结束后调用,主要用来垃圾收集。

    演示中实现了一个简单的SimpleAnimator作为缺省的Animator。这个animator实现一帧中简单彩虹的绘制,彩虹的颜色随着扩散半径的变大而渐变,透明度逐渐增高,直至消失。   
    本文的演示源代码可以从这儿下载
   更新:刚刚从Kirill Grouchnikov博客上的一个演示获得了一个灵感,实现了一种所谓幽灵扩散效果的GhostEffectAnimator类。被点击的组件,其影像逐渐扩散透明最后消失,很有幽灵的感觉。下面是效果图:
 
界面下面有两个选择按钮,可以在彩虹和幽灵两种效果之间切换

抱歉!评论已关闭.