我们在使用QQ的时候,可以通过向好友发送一个窗口抖动,然后就可以看到窗口在不段的跳舞了,呵呵。其实,我们在java中也可以实现这样的效果,其原理就是不断的在小范围内随机改变窗口的location就可以实现了。代码如下:
final int amplitude = 6; // 抖动的幅度
final long _times = 3 * 1000; // 抖动的时间
final Point location = shell.getLocation(); // 记录最开始时shell的位置
final long startTime = System.currentTimeMillis();
new Thread() {
public void run() {
int startX = location.x - amplitude/2, startY = location.y - amplitude/2;
while (System.currentTimeMillis() - startTime <= _times) {
final int rx = RandomUtil.random(startX, startX + amplitude);
final int ry = RandomUtil.random(startY, startY + amplitude);
shell.getDisplay().syncExec(new Runnable() {
public void run() {
shell.setLocation(rx, ry);
}
});
Thread.yield();
}
// restore the shell's location
shell.getDisplay().syncExec(new Runnable() {
public void run() {
shell.setLocation(location);
}
});
}
}.start();
代码中抖动的幅度是指以窗口的左上角顶点为中心左右的偏移距离(取值为一半),比如一个窗口的location为(20,30),那么对于6个像素的振幅,其location可以活动的范围就是一个矩形[(17,27),(27,23),(17,33),(23,33)]。
其中RandomUtil为一实用类,来获取某一个范围内的随机数,其代码如下:
public class RandomUtil {
private static final Random random = new Random();
/**
* return a integer value between from and to.
* @param from start value,include
* @param to end value,exclude
* @return
*/
public static int random(int from, int to) {
return from + random.nextInt(to - from);
}
}
另外,使用Thread.yield()和Thread.sleep(interval)是不太一样的,前者是交出CPU运行时间,但并不表示下一个CPU时间就不是分配给该线程;而后者则是完全交出CPU运行时间,直到睡眠结束。所以分别实用这两个来暂停线程所看到的效果将不太一样,呵呵,具体是什么样的效果,大家自己试试吧:-)
分享到:
相关推荐
java swt 窗口靠边自动隐藏,需要导入swt包...
使Excel嵌入到SWT窗口中 使用的Eclipse版本:3.3.1 使用的jdk版本:5.0
详细描述了SWT组件的实际应用 详细在说明书
笔者用SWT技术模仿QQ做的窗体抖动,当时想做的时候在网上找了很多资料,也没发现什么实际性的东西,所有笔者在实现以后,将源码给大家奉献上。
java SWT 基本窗口 组件 开发
有简单的SWT代码。。。。。。。。。。。
SWT教程,很不错的,相当的精辟,呵呵,初学者的福音
SWT原生按钮不够美观,本案例实现自定义圆形按钮,代码可直接下载使用。
SWT,AWT/Swing外,java的另一种桌面窗口程序的开发包。做JAVA桌面窗口开发,我们有了更多的选择。此API是我自己生成的。对应的SWT版本是我网上下的最新的,版本是swt-3.4,里面没有API。网上也没找到最新版本的,我...
SWT配置 SWT配置 SWT配置 SWT配置 SWT配置 SWT配置 SWT配置 SWT配置
SWT 案例之学习精华
NULL 博文链接:https://spllot.iteye.com/blog/542928
我在用SWT开发IM的时候想要隐藏任务栏图标,进过各种百度发现上面写的都是没什么实际作用的,没有达到我的效果,后面进过研究摸索,和查看源码,发下了解决方案,希望对你有所帮助
SWT教程之FormLayout介绍
64位windows操作系统使用的SWT库
关于SWT深入内幕之消息机制探秘,作者深入检出的说明了SWT工作的原理,非常不错,
swt背景拖动,拖动背景图片不将图片拖出窗口
[原创]SWT 深入内幕之消息机制探秘.zip
swt工具文档 swt工具文档 swt工具文档 swt工具文档 swt工具文档 swt工具文档
swt框架 适用与window下java窗口开发~~~~