这个特效不知道取什么名字好,就叫缓慢展开或消失吧,整个效果就像是一张纸一样慢慢拉出来或缩进去。这个效果的实现也比较简单,主要是通过设置shell的size来实现的,通常我们会有四种效果,即从左到右慢慢展现和消失、从右到左慢慢展现和消失、从上到下慢慢展现和消失、从下到上慢慢展现和消失。下面分别说明如下:
1.从左到右慢慢展现
这个效果实现的思路就是shell的location不变,刚开始设置shell的size的宽度为0,高度不变,然后逐步的将shell的width增加,从而就实现了shell的缓慢打开。代码如下:
final int width = shell.getSize().x;
final int startX = shell.getLocation().x;
new Thread(new Runnable() {
private int startWidth = 0;
public void run() {
while (startWidth <= width) {
shell.getDisplay().syncExec(new Runnable() {
public void run() {
shell.setSize(++ startWidth, shell.getSize().y);
}
});
Thread.yield(); // 暂停
}
}
}).start();
注意,我们是将每一次修改的操作都当成一个Runnable来执行的,而不是把整个while循环放在一个Runnable中执行,这样是为了避免Display执行Runnable时无法处理其他响应事件,从而导致展开效果并不流畅!另外,即使使用asyncExec执行也是一样的效果!
2.从右到左慢慢展现
从右到左的慢慢展现效果实现的思路和从左到右其实是一样的,只不过增加了一个同时设置shell的location的操作,这样我们才可以模拟从右边到左边慢慢打开的效果。实现代码如下:
final int width = shell.getSize().x;
final int startX = shell.getLocation().x;
new Thread(new Runnable() {
private int startWidth = 0;
public void run() {
while (startWidth <= width) {
shell.getDisplay().syncExec(new Runnable() {
public void run() {
shell.setSize(++ startWidth, shell.getSize().y);
shell.setLocation(startX + width - startWidth, shell.getLocation().y);
}
});
Thread.yield();
}
}
}).start();
3.从左到右慢慢消失
慢慢消失的实现思路是逐步的改变shell的size,从左到右慢慢消失就是shell的高度不变,width从原始的宽度慢慢减小到0,同时还需要同步设置shell的location,以保证右边总是在同一个位置。代码如下:
final int shellWidth = shell.getSize().x;
final int shellStartX = shell.getLocation().x;
new Thread() {
private int width = shellWidth;
private int startX = shellStartX;
public void run() {
while (width > 0) {
shell.getDisplay().syncExec(new Runnable() {
public void run() {
shell.setSize(-- width, shell.getSize().y);
shell.setLocation(++ startX, shell.getLocation().y);
}
});
Thread.yield();
}
}
}.start();
在消失完毕后,你还可以选择将shell关闭或是重新恢复到以前的大小和位置,那么就需要记录shell开始的size和location了。
4.从右到左慢慢消失
从右到左慢慢消失相比从左到右慢慢消失只是少了一个重新设置shell的location的操作,其代码如下:
final int shellWidth = shell.getSize().x;
final int shellStartX = shell.getLocation().x;
new Thread() {
private int width = shellWidth;
private int startX = shellStartX;
public void run() {
while (width > 0) {
shell.getDisplay().syncExec(new Runnable() {
public void run() {
shell.setSize(-- width, shell.getSize().y);
}
});
Thread.yield();
}
}
}.start();
5.从上到下慢慢显示
实现思路就是shell的location不变,shell的width不变,将shell的height从0慢慢增加到shell的实际高度即可。代码也比较简单,就不重复写了,留给大家自己写吧,呵呵。
6.从上到下慢慢消失
实现思路就是shell的width不变,逐步的将shell的height从原始高度变到0,同时height每减少1,则将其location的y增加1,从而保证shell的底部总是在同一位置,而顶部则是在逐步的下移,从而实现效果,代码略。
7.从下到上慢慢显示
实现思路就是shell的width不变,将高度逐步的由0变成原始的高度,同时也需要同步改变shell的location,高度每增加1,则shell的location的y则减1.代码略。
8.从下到上慢慢消失
实现思路就是shell的width不变,将height由原始的高度慢慢减小到0,其location不变,代码略。
以上就是对shell的size和location的改变来实现慢慢消失或显示的效果,这也是一个很简单的窗口特效了。后面将继续给大家介绍SWT窗口的其他特效,如百叶窗的打开和关闭特效、圆形消失和显示特效等等:-)
分享到:
相关推荐
使Excel嵌入到SWT窗口中 使用的Eclipse版本:3.3.1 使用的jdk版本:5.0
java swt 窗口靠边自动隐藏,需要导入swt包...
详细描述了SWT组件的实际应用 详细在说明书
java SWT 基本窗口 组件 开发
有简单的SWT代码。。。。。。。。。。。
SWT配置 SWT配置 SWT配置 SWT配置 SWT配置 SWT配置 SWT配置 SWT配置
SWT,AWT/Swing外,java的另一种桌面窗口程序的开发包。做JAVA桌面窗口开发,我们有了更多的选择。此API是我自己生成的。对应的SWT版本是我网上下的最新的,版本是swt-3.4,里面没有API。网上也没找到最新版本的,我...
SWT原生按钮不够美观,本案例实现自定义圆形按钮,代码可直接下载使用。
SWT教程,很不错的,相当的精辟,呵呵,初学者的福音
NULL 博文链接:https://spllot.iteye.com/blog/542928
SWT 案例之学习精华
64位windows操作系统使用的SWT库
swt背景拖动,拖动背景图片不将图片拖出窗口
我在用SWT开发IM的时候想要隐藏任务栏图标,进过各种百度发现上面写的都是没什么实际作用的,没有达到我的效果,后面进过研究摸索,和查看源码,发下了解决方案,希望对你有所帮助
swt工具文档 swt工具文档 swt工具文档 swt工具文档 swt工具文档 swt工具文档
SWT教程之FormLayout介绍
SWT库32位和64位
swt框架 适用与window下java窗口开发~~~~
SWT Win32 Extension提供了一系列的功能使您的应用程序看上去和Win32本机程序别无二致。 窗口装饰功能: 提供窗口置顶,透明,闪动等功能。 自定义窗口: 创建不规则的窗口。 访问Windows注册表。 系统文件夹: 获取...
SWT examples,SWT官方例子:http://www.eclipse.org/swt/examples.php 该页面所要下载的例子 其中,swt的例子在\plugins\org.eclipse.swt.examples.source_3.7.0.v3740f.jar中