这个特效不知道取什么名字好,就叫缓慢展开或消失吧,整个效果就像是一张纸一样慢慢拉出来或缩进去。这个效果的实现也比较简单,主要是通过设置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窗口的其他特效,如百叶窗的打开和关闭特效、圆形消失和显示特效等等:-)
分享到:
相关推荐
本例展示了如何使用SWT和OLE技术将Excel嵌入到SWT窗口中。同时,我们也讨论了Eclipse版本和jdk版本的选择、SWT的使用、OLE技术的使用、OleFrame和OleClientSite的使用、OLE对象的Id和OLE对象的动作等知识点。
详细描述了SWT组件的实际应用 详细在说明书
4. **动画效果**:为了提供更好的用户体验,你还可以添加动画效果,比如窗口在靠边时缓慢地滑入屏幕边缘,而不是瞬间消失。 5. **处理鼠标事件**:当用户将鼠标移动到隐藏区域附近时,窗口应该能够自动显示出来。...
java SWT 基本窗口 组件 开发
SWT库的强大之处在于它的灵活性和性能。由于它直接与操作系统交互,因此创建的界面看起来和感觉上都与系统原生应用一致。然而,这也意味着SWT不跨平台,每个操作系统需要单独的SWT库。 在实际开发中,我们还可以...
在设计这样的窗口时,你需要考虑布局管理,SWT提供了几种布局类型,如FillLayout、GridLayout、RowLayout和 MigLayout,它们帮助你控制组件在窗口中的排列方式。 "SWT designer"是一个强大的可视化设计工具,它允许...
8. **国际化和本地化**:对于更完整的设计,窗口的文本可能需要支持多语言,这就涉及到 SWT/JFace 的国际化和本地化支持。 9. **布局管理**:为了美观地排列控件,需要使用布局管理器,如 `GridLayout` 或 `...
SWT(Standard Widget Toolkit)是Eclipse平台下的图形界面开发工具包,而JFace则是基于SWT之上的高级用户界面工具集。SWT提供了低级别的组件,用于创建跨平台的图形用户界面;而JFace则在此基础上提供了更高级别的...
SWT的设计目标是提供一个与平台相关的、高效的GUI库,它通过直接调用操作系统API来实现,而不是像Java Swing那样依赖Java抽象窗口工具包(AWT)和Java 2D。这种设计使得SWT应用程序在性能上通常优于Swing,并且可以...
SWT的Shell类提供了`setDecorations(int flags)`方法,用于设置窗口装饰,如标题、边框和菜单。遗憾的是,SWT并没有提供一个直接的标志来控制任务栏图标的显示。不过,我们可以通过修改`SWT.NO_TRIM`标志来尝试隐藏...
要实现"背景拖动"功能,我们需要创建一个 SWT Shell 对象,作为我们的应用程序窗口,并在此之上设置背景图片。我们可以通过以下步骤来实现: 1. **创建Shell对象**: 首先,我们需要创建一个 `Shell` 对象,这是...
SWT与Java的另一GUI库AWT和Swing不同,它不依赖于Java虚拟机的抽象窗口工具包,而是直接调用操作系统提供的API,因此可以实现更高效、更贴近系统风格的界面。 本案例的学习精华主要围绕以下几个关键知识点展开: 1...
本文旨在深入探讨SWT如何解决面向对象编程框架与Windows消息机制之间的桥梁问题,特别是针对SWT如何封装窗口过程,以及它与MFC、VCL等其他框架的不同之处。 #### 二、SWT的工作原理 SWT是一种基于本地代码的Java...
### Eclipse之SWT编程:深度解析与应用 #### 一、SWT的诞生与优势 SWT(Standard Widget Toolkit)是IBM为解决Java GUI开发中的一些固有问题而设计的一套跨平台图形用户界面开发框架。在Java GUI的历史进程中,Sun...
JFace是建立在SWT之上的高级用户界面框架,它简化了UI开发过程,使得程序员可以更加专注于业务逻辑而不是界面细节。JFace提供了数据绑定、对话框、视图和工作台等高级功能,但并非覆盖了SWT的所有功能。JFace和SWT的...
有简单的SWT代码。。。。。。。。。。。
SWT(Standard Widget Toolkit)是Eclipse项目的一个重要组成部分,它提供了一套用于构建图形用户界面(GUI)的API,与Java Swing不同,SWT基于操作系统原生的UI组件,因此能够实现更好的性能和与操作系统的集成。...
JFace是建立在SWT之上的一个高级GUI库,它简化了GUI编程,提供了一些高级功能,比如视图和控制器模型,但并不能完全替代SWT。两者的关系可以理解为JFace在SWT的基础上增加了一层抽象,使得开发更加便捷。 开发SWT...
使用SWT API进行开发时,开发者需要了解如何创建窗口、添加控件、设置布局、响应用户事件,以及如何与其他Java库(如JFace)结合使用以提高代码的可读性和可维护性。"swt-api swt DOC"的CHM文档可能涵盖了这些内容,...
SWT提供了多种布局管理器,如`FillLayout`、`GridLayout`、`RowLayout`和` MigLayout`,它们帮助开发者控制控件在窗口中的位置和大小。例如,`GridLayout`可以方便地创建网格状的布局,而`MigLayout`则提供更复杂的...