`
ferreousbox
  • 浏览: 287088 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

SWT窗口特效之缓慢展开和消失

    博客分类:
  • java
阅读更多

    这个特效不知道取什么名字好,就叫缓慢展开或消失吧,整个效果就像是一张纸一样慢慢拉出来或缩进去。这个效果的实现也比较简单,主要是通过设置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窗口的其他特效,如百叶窗的打开和关闭特效、圆形消失和显示特效等等:-)

1
0
分享到:
评论
4 楼 ae6623 2014-08-20  
高大上!!



package book.ch2;

import org.eclipse.swt.SWT;
import org.eclipse.swt.SWTError;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.events.ShellEvent;
import org.eclipse.swt.events.ShellListener;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;

public class HelloTextShell2 {

	/**
	 * @param args
	 */
	public static void main(String args[]) {

		Display display = new Display();
		final Shell shell = new Shell(display);

		shell.setText("SWT Browser Test");
		shell.setSize(500, 500);
		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();

		shell.open();

		while (!shell.isDisposed()) {
			if (!display.readAndDispatch())
				display.sleep();
		}
		display.dispose();
	}
}


3 楼 liuwenfeng554 2012-11-05  
如果从中间 向周边扩展 该怎么实现 
2 楼 ferreousbox 2009-07-07  
blueocean 写道
Eclipse里面的那个Java editor界面最大化的时候那个特效如何关闭啊, 看着我就头痛.

在"window->Preferences->General->Appearance"中关闭"Enable animations"选项即可!
1 楼 blueocean 2009-07-07  
Eclipse里面的那个Java editor界面最大化的时候那个特效如何关闭啊, 看着我就头痛.

相关推荐

    使Excel嵌入到SWT窗口中

    本例展示了如何使用SWT和OLE技术将Excel嵌入到SWT窗口中。同时,我们也讨论了Eclipse版本和jdk版本的选择、SWT的使用、OLE技术的使用、OleFrame和OleClientSite的使用、OLE对象的Id和OLE对象的动作等知识点。

    swt 窗口设计演示

    详细描述了SWT组件的实际应用 详细在说明书

    java swt 窗口靠边自动隐藏

    4. **动画效果**:为了提供更好的用户体验,你还可以添加动画效果,比如窗口在靠边时缓慢地滑入屏幕边缘,而不是瞬间消失。 5. **处理鼠标事件**:当用户将鼠标移动到隐藏区域附近时,窗口应该能够自动显示出来。...

    SWT 基本 窗口 组件

    java SWT 基本窗口 组件 开发

    SWT创建Shell窗口

    SWT库的强大之处在于它的灵活性和性能。由于它直接与操作系统交互,因此创建的界面看起来和感觉上都与系统原生应用一致。然而,这也意味着SWT不跨平台,每个操作系统需要单独的SWT库。 在实际开发中,我们还可以...

    SWT.rar_SWT tutorial_java swt_swt 登陆窗口_swt tutori_swt-designer

    在设计这样的窗口时,你需要考虑布局管理,SWT提供了几种布局类型,如FillLayout、GridLayout、RowLayout和 MigLayout,它们帮助你控制组件在窗口中的排列方式。 "SWT designer"是一个强大的可视化设计工具,它允许...

    SWT/JFACE客户端登录窗口例子

    8. **国际化和本地化**:对于更完整的设计,窗口的文本可能需要支持多语言,这就涉及到 SWT/JFace 的国际化和本地化支持。 9. **布局管理**:为了美观地排列控件,需要使用布局管理器,如 `GridLayout` 或 `...

    SWT JFace 按键、事件、监听

    SWT(Standard Widget Toolkit)是Eclipse平台下的图形界面开发工具包,而JFace则是基于SWT之上的高级用户界面工具集。SWT提供了低级别的组件,用于创建跨平台的图形用户界面;而JFace则在此基础上提供了更高级别的...

    swt-64.rar_64位swt_64的SWT_SWT64_swt.jar 64位_swt64位

    SWT的设计目标是提供一个与平台相关的、高效的GUI库,它通过直接调用操作系统API来实现,而不是像Java Swing那样依赖Java抽象窗口工具包(AWT)和Java 2D。这种设计使得SWT应用程序在性能上通常优于Swing,并且可以...

    SWT隐藏任务栏图标

    SWT的Shell类提供了`setDecorations(int flags)`方法,用于设置窗口装饰,如标题、边框和菜单。遗憾的是,SWT并没有提供一个直接的标志来控制任务栏图标的显示。不过,我们可以通过修改`SWT.NO_TRIM`标志来尝试隐藏...

    swt背景拖动不将图片拖出窗口

    要实现"背景拖动"功能,我们需要创建一个 SWT Shell 对象,作为我们的应用程序窗口,并在此之上设置背景图片。我们可以通过以下步骤来实现: 1. **创建Shell对象**: 首先,我们需要创建一个 `Shell` 对象,这是...

    SWT 案例之学习精华

    SWT与Java的另一GUI库AWT和Swing不同,它不依赖于Java虚拟机的抽象窗口工具包,而是直接调用操作系统提供的API,因此可以实现更高效、更贴近系统风格的界面。 本案例的学习精华主要围绕以下几个关键知识点展开: 1...

    SWT深入内幕之消息机制探秘.pdf

    本文旨在深入探讨SWT如何解决面向对象编程框架与Windows消息机制之间的桥梁问题,特别是针对SWT如何封装窗口过程,以及它与MFC、VCL等其他框架的不同之处。 #### 二、SWT的工作原理 SWT是一种基于本地代码的Java...

    Eclipse之SWT编程

    ### Eclipse之SWT编程:深度解析与应用 #### 一、SWT的诞生与优势 SWT(Standard Widget Toolkit)是IBM为解决Java GUI开发中的一些固有问题而设计的一套跨平台图形用户界面开发框架。在Java GUI的历史进程中,Sun...

    java SWT教程

    JFace是建立在SWT之上的高级用户界面框架,它简化了UI开发过程,使得程序员可以更加专注于业务逻辑而不是界面细节。JFace提供了数据绑定、对话框、视图和工作台等高级功能,但并非覆盖了SWT的所有功能。JFace和SWT的...

    简单SWT源代码,有那个简单的跳转,关闭,滑动窗口

    有简单的SWT代码。。。。。。。。。。。

    SWT源码 swt.jar

    SWT(Standard Widget Toolkit)是Eclipse项目的一个重要组成部分,它提供了一套用于构建图形用户界面(GUI)的API,与Java Swing不同,SWT基于操作系统原生的UI组件,因此能够实现更好的性能和与操作系统的集成。...

    swt教程 有关SWT怎么应用

    JFace是建立在SWT之上的一个高级GUI库,它简化了GUI编程,提供了一些高级功能,比如视图和控制器模型,但并不能完全替代SWT。两者的关系可以理解为JFace在SWT的基础上增加了一层抽象,使得开发更加便捷。 开发SWT...

    swt-api swt DOC

    使用SWT API进行开发时,开发者需要了解如何创建窗口、添加控件、设置布局、响应用户事件,以及如何与其他Java库(如JFace)结合使用以提高代码的可读性和可维护性。"swt-api swt DOC"的CHM文档可能涵盖了这些内容,...

    java程序设计之swt教程

    SWT提供了多种布局管理器,如`FillLayout`、`GridLayout`、`RowLayout`和` MigLayout`,它们帮助开发者控制控件在窗口中的位置和大小。例如,`GridLayout`可以方便地创建网格状的布局,而`MigLayout`则提供更复杂的...

Global site tag (gtag.js) - Google Analytics