我们在使用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运行时间,直到睡眠结束。所以分别实用这两个来暂停线程所看到的效果将不太一样,呵呵,具体是什么样的效果,大家自己试试吧:-)
分享到:
相关推荐
在SWT中实现窗体抖动功能,可以使得应用程序具有更生动的交互效果,比如模拟即时通讯软件如QQ中的消息提醒。 窗体抖动功能通常涉及到窗口的位置和大小的动态变化,以模拟一种吸引用户注意力的效果。在"SWT做的窗体...
使Excel嵌入到SWT窗口中 知识点一:Eclipse版本和jdk版本的选择 在本例中,我们使用的是Eclipse 3.3.1版本和jdk 5.0版本。Eclipse是一个开源的集成开发环境(IDE),它支持多种编程语言,包括Java、C++、Python等...
详细描述了SWT组件的实际应用 详细在说明书
在Java SWT中,窗口靠边自动隐藏功能是一种常见的需求,通常应用于桌面应用的界面设计,使得用户可以更高效地利用屏幕空间。 实现"Java SWT窗口靠边自动隐藏"的功能,我们需要了解SWT中的几个关键概念: 1. **...
java SWT 基本窗口 组件 开发
SWT库的强大之处在于它的灵活性和性能。由于它直接与操作系统交互,因此创建的界面看起来和感觉上都与系统原生应用一致。然而,这也意味着SWT不跨平台,每个操作系统需要单独的SWT库。 在实际开发中,我们还可以...
在设计这样的窗口时,你需要考虑布局管理,SWT提供了几种布局类型,如FillLayout、GridLayout、RowLayout和 MigLayout,它们帮助你控制组件在窗口中的排列方式。 "SWT designer"是一个强大的可视化设计工具,它允许...
在SWT中,窗口(Shell)是应用程序的基本容器,它在任务栏上显示为一个图标。默认情况下,Shell会自动创建并显示任务栏图标。要实现隐藏任务栏图标的功能,我们需要深入理解SWT的内部机制,并可能需要对源码进行一定...
JFace 则是建立在 SWT 之上的高级抽象层,它简化了界面设计,减少了代码量,让开发者更加专注于业务逻辑。 在这个“SWT/JFACE 客户端登录窗口例子”中,我们可以预期会看到如何使用这两个库来创建一个基本的登录...
SWT的设计目标是提供一个与平台相关的、高效的GUI库,它通过直接调用操作系统API来实现,而不是像Java Swing那样依赖Java抽象窗口工具包(AWT)和Java 2D。这种设计使得SWT应用程序在性能上通常优于Swing,并且可以...
SWT(Standard Widget Toolkit)是Eclipse平台下的图形界面开发工具包,而JFace则是基于SWT之上的高级用户界面工具集。SWT提供了低级别的组件,用于创建跨平台的图形用户界面;而JFace则在此基础上提供了更高级别的...
有简单的SWT代码。。。。。。。。。。。
本文旨在深入探讨SWT如何解决面向对象编程框架与Windows消息机制之间的桥梁问题,特别是针对SWT如何封装窗口过程,以及它与MFC、VCL等其他框架的不同之处。 #### 二、SWT的工作原理 SWT是一种基于本地代码的Java...
要实现"背景拖动"功能,我们需要创建一个 SWT Shell 对象,作为我们的应用程序窗口,并在此之上设置背景图片。我们可以通过以下步骤来实现: 1. **创建Shell对象**: 首先,我们需要创建一个 `Shell` 对象,这是...
### Eclipse之SWT编程:深度解析与应用 #### 一、SWT的诞生与优势 SWT(Standard Widget Toolkit)是IBM为解决Java GUI开发中的一些固有问题而设计的一套跨平台图形用户界面开发框架。在Java GUI的历史进程中,Sun...
JFace是建立在SWT之上的高级用户界面框架,它简化了UI开发过程,使得程序员可以更加专注于业务逻辑而不是界面细节。JFace提供了数据绑定、对话框、视图和工作台等高级功能,但并非覆盖了SWT的所有功能。JFace和SWT的...
SWT原生按钮不够美观,本案例实现自定义圆形按钮,代码可直接下载使用。
SWT,AWT/Swing外,java的另一种桌面窗口程序的开发包。做JAVA桌面窗口开发,我们有了更多的选择。此API是我自己生成的。对应的SWT版本是我网上下的最新的,版本是swt-3.4,里面没有API。网上也没找到最新版本的,我...
SWT与Java的另一GUI库AWT和Swing不同,它不依赖于Java虚拟机的抽象窗口工具包,而是直接调用操作系统提供的API,因此可以实现更高效、更贴近系统风格的界面。 本案例的学习精华主要围绕以下几个关键知识点展开: 1...
JFace是建立在SWT之上的一个高级GUI库,它简化了GUI编程,提供了一些高级功能,比如视图和控制器模型,但并不能完全替代SWT。两者的关系可以理解为JFace在SWT的基础上增加了一层抽象,使得开发更加便捷。 开发SWT...