积微成著 不积跬步,无以至千里

首页   >   web开发   >   SwingQQ窗体抖动效果

SwingQQ窗体抖动效果

之前讲过了好友列表的闪烁,消息来临的时候,能第一时间知道,但是有时候消息太多了,实在没看到,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代码来运行看效果吧!

QQ群:积微成著官方群(686430774),验证消息:积微成著

站长Q:1347384268(加好友请注明来意)

分享到:

欢迎分享本文,转载请注明出处!

作者:不忘初心

发布时间:2017-12-19

永久地址:http://www.jiweichengzhu.com/article/00e726d9709d4b9ab9cdffc3c50e271f