您现在的位置是:网站首页 > 代码编程 > JAVA开发JAVA开发

【原】SwingQQ窗体抖动效果

不忘初心 不忘初心 2017-12-19 围观() 评论() 点赞() JAVA开发

简介:之前讲过了好友列表的闪烁,消息来临的时候,能第一时间知道,但是有时候消息太多了,实在没看到,QQ还提供了一个必杀技——窗体抖动,这个功能也非常的好用,给好友发送抖动窗口了之后,直接强制将聊天窗口弹出来,并且在屏幕上抖一抖,这样总该能看到消息了。今天来教大家如何让swing窗体也抖动起来,实现原理非常的简单,上一篇文章中讲过好友头像的闪烁,就是动态改变窗体的坐标,还需要加入一个循环,让抖动的效果持续

之前讲过了好友列表的闪烁,消息来临的时候,能第一时间知道,但是有时候消息太多了,实在没看到,QQ还提供了一个必杀技——窗体抖动,这个功能也非常的好用,给好友发送抖动窗口了之后,直接强制将聊天窗口弹出来,并且在屏幕上抖一抖,这样总该能看到消息了。

今天来教大家如何让swing窗体也抖动起来,实现原理非常的简单,上一篇文章中讲过好友头像的闪烁,就是动态改变窗体的坐标,还需要加入一个循环,让抖动的效果持续一会儿

好了,没多少要说的,直接给代码了:

package com.wolffy.frame;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.WindowConstants;
import java.awt.BorderLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;


/**
 * Created by SongFei on 2017/12/19.
 */
public class ShakeFrame extends JFrame {

    private JPanel jPanel;

    private JButton jButton;

    private long shakeTime;

    public ShakeFrame() {
        initGUI();
    }

    private void initGUI() {
        setSize(700, 400);
        //setUndecorated(true);
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

        jPanel = new JPanel();
        getContentPane().add(jPanel, BorderLayout.CENTER);

        jButton = new JButton("抖动");
        jPanel.add(jButton);

        jButton.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                shake();
            }
        });
    }

    /**
     * 抖动窗体,原理就是动态改变窗体坐标,跟好友头像闪动一样
     */
    private void shake() {
        try {
            // 校验操作是否过于频繁,5秒内不能再次抖动
            long currentTime = System.currentTimeMillis();
            if (currentTime - shakeTime <= 5000) {
                System.err.println("抖动过于频繁");
                return;
            }
            // 抖动成功之后,需要记录时间,下次做判断
            shakeTime = currentTime;
            // 窗体在屏幕上所在的初始坐标
            int x = this.getX();
            int y = this.getY();
            // 抖动多少次,不宜太多,也不宜太少
            for (int i = 0; i < 20; i++) {
                // System.out.println(i & 1);
                // i & 1,这个作用是奇偶分开
                if ((i & 1) == 0) {
                    x += 3;
                    y += 3;
                } else {
                    x -= 3;
                    y -= 3;
                }
                // 改变窗体的坐标
                this.setLocation(x, y);
                // 睡一会儿,造成停顿的效果
                Thread.sleep(50);
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        ShakeFrame shakeFrame = new ShakeFrame();
        shakeFrame.setVisible(true);
        //loginFrame.pack();
        shakeFrame.setLocationRelativeTo(null);
    }

}

抖动是坐标来回切换,循环中的判断条件打印出来,值如下图所示,类似于奇数和偶数分开,i % 2 == 0,也是可以实现的,大家想用哪种都行

SwingQQ窗体抖动效果

QQ抖动时点快了会给出提示,这里也模拟了一下,很简单,就是记录一下时间,然后下次点击的时候来比对这个时间,看看是否过于短暂

SwingQQ窗体抖动效果

基本上就这些了,大家直接copy代码来运行看效果吧!

swing抖动窗口

看完文章,有任何疑问,请加入群聊一起交流!!!

很赞哦! ()

文章评论

  • 请先说点什么
    人参与,条评论

请使用电脑浏览器访问本页面,使用手机浏览器访问本页面会导致下载文件异常!!!

雨落无影

关注上方公众号,回复关键字【下载】获取下载码

用完即删,每次下载需重新获取下载码

若出现下载不了的情况,请及时联系站长进行解决

站点信息

  • 网站程序:spring + freemarker
  • 主题模板:《今夕何夕》
  • 文章统计:篇文章
  • 标签管理标签云
  • 微信公众号:扫描二维码,关注我们