`
log_cd
  • 浏览: 1090567 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

关于SWT-JFace-RCP

阅读更多
    Eclipse 是一个通用工具平台。它是一个开放的、可用于任何东西的可扩展 IDE,它为工具开发人员提供了灵活性以及对软件技术的控制能力。Eclipse 为开发人员提供了生产大量 GUI 驱动的工具和应用程序的基础。而这项功能的基础就是基于GUI库 的SWT 和 JFace。
    SWT(Standard Widget Toolkit)本身仅仅是Eclipse组织为了开发Eclipse IDE环境所编写的一组底层图形界面 API。至今为止,SWT无论在性能上还是外观上,都超越了Sun公司提供的AWT和Swing。
    SWT/JFace是Eclispe的基础,Eclipse的Workbench就是建立在SWT/JFace之上的。
    RCP(Rich Client Platform)富客户端平台是基于Eclipse插件开发的一种应用。它是Eclipse 3.0版本后新增的一项功能。通过RCP可以快速构建应用程序,具有广阔的应用前景。

一、概念
(1)SWT(Standard Widget Toolkit):
    Eclipse中的窗口小部件工具箱,它是一组窗口组件的实现,并能底层操作系统图形用户界面平台紧密集成。另外,SWT定义了所有受支持平台上的公共可移植API,并尽可能地使用本机窗口小部件在每个平台上实现该API,这允许SWT在所有平台上维护一致的编程模型,且能立即反映底层操作系统图形用户界面外观中的任何更改。
    SWT提供了一套API,它因为Eclipse而生,但它完全可以脱离Eclipse而存在。

(2)JFace:
    在 SWT 库顶部提供常见的应用程序用户界面功能。JFace并不试图“隐藏”SWT 或者替换它的功能。它提供一些类和接口,用来处理SWT对动态用户界面相关联的常见任务。JFace是在SWT之上开发的,它和SWT形成一个交集,其中SWT提供最原始的组件。
    JFace对SWT进行了扩展,把用户熟悉的一些组件进行了封装,在开发中用户可以尽可能地用JFace组件来开发自己的应用。JFace程序和SWT程序类似,只不过JFace把常用的功能进行了提炼,使用户不必太关心SWT的一些细节。

(3)RCP(Rich Client Platform):
   本质上是Eclipse的插件,所以当开发RCP应用程序时,可以利用Eclipse平台UI外观和框架来快速地进行开发。例如创建一个菜单栏、工具栏。
   当程序员开发桌面的应用时,往往想摆脱对Eclipse IDE的依赖,而是希望使用最小的运行环境来运行系统。所以在Eclipse 3.0以后的版本中逐步地将插件的运行从Eclipse的运行平台中剥离出来,从而形成了RCP。脱离Eclipse平台独立运行,这样大大减少了打包程序后文件的体积,使系统更加小巧和雅观。

二、SWT特性及组件
(1)特性
   SWT是一个套库函数,它创建了Java 版的本地操作系统 GUI 控件。它依赖于本机实现,这意味着基于SWT的应用程序具有以下几个关键特性:
<1>它们的外观、行为和执行类似于“本机”应用程序。
<2>所提供的窗口小部件(Widget)反映了主机操作系统上提供的窗口小部件(组件和控件)。
<3>主机 GUI 库的任何特殊行为都在 SWT GUI 中得到反映。
   SWT 不同于 Java 技术的 Swing,Swing 的设计目标是消除操作系统的差异。SWT 库反映了主机操作系统的基本窗口小部件,JFace 库有助于向 SWT 应用程序中添加大量服务,SWT 最重要的扩展之一是将应用程序的数据模型与显示及更改它的 GUI 隔离开来。

(2)SWT中的基本组件
<1>Widget:基本的 SWT GUI 组件(类似于 Java AWT 中的 Component 和 Swing 中的 JComponent),Widget 是一个抽象类。
<2>Control:拥有操作系统的对等物的窗口小部件,Control 是一个抽象类。
<3>Composite:包含其他控件的控件(类似于 Java AWT 中的 Container 和 Swing 中的JPanel)。
<4>Item:其他控件包含的窗口小部件(该控件可能是复合控件),如列表和表。Item 是一个抽象类。
这些窗口组件(或小部件)被安排在继承层次结构中。其中Widget是底层的类。  

   为了避免命名冲突,定制控件的名称都是以“C”开始的(例如,比较 CLabel 与 Label)。

提示:创建一个组件通常有两个参数,第一个为父组件,第二个是组件的显示样式,例如:“Button button = new Button(shell, SWT.RADIO);”。

三、使用SWT Designer作为开发工具
    SWT Designer 是一种功能强大且容易使用的基于Eclipse SWT技术的图形用户界面设计工具,是一个很好的Eclipse的界面开发插件包。利用SWT Designer 的可视化界面,只需采用拖拉操作,就可以很快地在窗体上创建各种组件,设计出来的窗体和组件的外观和操作系统平台下其他软件的外观相似,具有本机系统的风格。
(1)下载
http://www.instantiations.com/windowbuilder/swtdesigner/download.html?id=2
(2)文档
http://download.instantiations.com/D2WBDoc/continuous/latest/docs/html/index.html
四、创建系统托盘
	/**
	 * 创建托盘
	 * @param shell
	 */
	private static void createSysTray(Shell shell){
		final int hWnd = shell.handle;       
        OS.SetWindowLong(hWnd, OS.GWL_EXSTYLE, OS.WS_EX_CAPTIONOKBTN);       
		final Tray tray = Display.getCurrent().getSystemTray();
		
		if(tray == null){
			return;
		}else{
			Display display = Display.getCurrent();
	        final Menu trayMenu = createTrayMenu(display, shell);       
	        final TrayItem item = new TrayItem(tray, SWT.NONE);       
	        item.setToolTipText("MyEditor");       
	        item.setImage(SWTResourceManager.getImage(MyEditor.class,
			"/app.ico"));
	        
	        Listener listener = new Listener() {       
	            public void handleEvent(Event event) {       
	                if (event.type == SWT.Show){
	                    System.out.println("显示");       
	                }else if (event.type == SWT.Hide){       
	                    System.out.println("隐藏");
	                }else if (event.type == SWT.Selection){       
	                    System.out.println("选中");
	                	Shell s = event.display.getShells()[0];       
	                    s.setVisible(true);       
	                    s.setMinimized(false); 
	                }else if (event.type == SWT.DefaultSelection){       
	                    System.out.println("默认选中");
	                	Shell s = event.display.getShells()[0];       
	                    s.setVisible(true);       
	                    s.setMinimized(false); 
	                }else if (event.type == SWT.MenuDetect){       
	                    trayMenu.setVisible(true);
	                }
	            }       
	        };       
	        item.addListener(SWT.Show, listener);       
	        item.addListener(SWT.Hide, listener);       
	        item.addListener(SWT.Selection, listener);       
	        item.addListener(SWT.DefaultSelection, listener);       
	        item.addListener(SWT.MenuDetect, listener);       

	        shell.addShellListener(new ShellListener() {       
	            public void shellDeactivated(ShellEvent e) {       
	            }       
	            public void shellActivated(ShellEvent e) {       
	            }       
	            public void shellClosed(ShellEvent e) {       
	            }       
	            public void shellDeiconified(ShellEvent e) {       
	            }       
	            public void shellIconified(ShellEvent e) {       
	                ((Shell) e.getSource()).setVisible(false);       
	            }       
	        }); 
		}
		
	}
	
	/**
	 * 创建托盘菜单
	 * @param display
	 * @param shell
	 * @return
	 */
    private static Menu createTrayMenu(final Display display, final Shell shell) {
    	Image image = SWTResourceManager.getImage(MyEditor.class,
		"/app.ico");
    	
        final Menu trayMenu = new Menu(shell, SWT.POP_UP);       
        MenuItem welcomeItem = new MenuItem(trayMenu, SWT.PUSH);       
        welcomeItem.setText("欢迎");       
        welcomeItem.setImage(image);       
        new MenuItem(trayMenu, SWT.SEPARATOR);       
        MenuItem updatetem = new MenuItem(trayMenu, SWT.PUSH);       
        updatetem.setText("在线更新");       
        MenuItem aboutItem = new MenuItem(trayMenu, SWT.PUSH);       
        aboutItem.setText("关于我们");       
        aboutItem.setImage(image);
        MenuItem exitItem = new MenuItem(trayMenu, SWT.PUSH);
        exitItem.setText("退出");
        exitItem.addSelectionListener(new SelectionListener(){
			@Override
			public void widgetDefaultSelected(SelectionEvent e) {
				shell.close();
			}
			@Override
			public void widgetSelected(SelectionEvent e) {
				shell.close();
			}
        });
        trayMenu.setDefaultItem(welcomeItem);       
        return trayMenu;       
    }
分享到:
评论
1 楼 wuyufeixue 2011-07-04  
         

相关推荐

    Eclipse SWT JFace核心应用_pdf_含标签_目录

    《Eclipse SWT/Jface核心应用》全面介绍了SWT、JFace和RCP的相关知识。全书共分5篇,第1篇介绍了SWT产生的背景以及SWT的一些基本概念和基础知识。第2篇介绍了SWT基本控件的使用,以及事件处理、布局等SWT基本知识的...

    Eclipse_Swt_Jface_核心应用的源码

    《Eclipse_Swt_Jface_核心应用》介绍Eclipse的核心,详细讲解了SWT,JFace,RCP,介绍了SWT,JFace的基本控件以及事件处理,布局,及SWT的高级应用,JFace的框架及RCP的框架及应用的开发.这里是这本书的光盘源码

    Eclipse SWT/Jface核心应用(2)

    《Eclipse SWT/Jface核心应用》全面介绍了SWT、JFace和RCP的相关知识。全书共分5篇,第1篇介绍了SWT产生的背景以及SWT的一些基本概念和基础知识。第2篇介绍了SWT基本控件的使用,以及事件处理、布局等SWT基本知识的...

    Eclipse SWT/Jface核心应用(1)

    《Eclipse SWT/Jface核心应用》全面介绍了SWT、JFace和RCP的相关知识。全书共分5篇,第1篇介绍了SWT产生的背景以及SWT的一些基本概念和基础知识。第2篇介绍了SWT基本控件的使用,以及事件处理、布局等SWT基本知识的...

    Eclipse SWT JFace核心应用 PDF.part1 of 3

    本书全面介绍了SWT、JFace和RCP的相关知识。全书共分5篇,第1篇介绍了SWT产生的背景以及SWT的一些基本概念和基础知识。第2篇介绍了SWT基本控件的使用,以及事件处理、布局等SWT基本知识的应用。第3篇介绍了关于SWT的...

    Eclipse SWT JFace核心应用 PDF.part2 of 3

    本书全面介绍了SWT、JFace和RCP的相关知识。全书共分5篇,第1篇介绍了SWT产生的背景以及SWT的一些基本概念和基础知识。第2篇介绍了SWT基本控件的使用,以及事件处理、布局等SWT基本知识的应用。第3篇介绍了关于SWT的...

    Eclipse SWT JFace核心应用 PDF.part3 of 3

    本书全面介绍了SWT、JFace和RCP的相关知识。全书共分5篇,第1篇介绍了SWT产生的背景以及SWT的一些基本概念和基础知识。第2篇介绍了SWT基本控件的使用,以及事件处理、布局等SWT基本知识的应用。第3篇介绍了关于SWT的...

    开发项目用SWING与RCP与SWT.JFACE的分析

    开发项目用SWING与RCP与SWT.JFACE的分析 第一个SWT程序 下面让我们开始一个SWT程序。(注意:以下的例子和说明主要针对Windows平台,其它的操作系统应该大同小异)。首先要在Eclipse安装文件中找到SWT包,Eclipse...

    基于SWt,JFace的Rcp 开发实例

    一个介绍RCp开发的实例项目,包含了SWt,JFace组件 的用法,特别适用于初学者

    swt&jface&rcp.chm.rar

    swt&jface&rcp.chm.rar

    swt/Jface中文教程

    rcp开发中用到的swt/Jface组件等 Swt.JFace.in.Action中文版

    SWT\JFace核心应用 PDF文档(14-19章)

    本文档含14-19章;由于上传大小的限制分开了上传。覆盖SWT技术的各个方面,从最基本的简单概念到SWT线程的高级知识,再到SWT的扩展JFace,然后到RCP的应用。本书内容涵盖SWT的各个方面,是对SWT内容体系的整体总结。

    SWT/JFace核心应用PDF文档(1-7章)

    本文档含1-7章;由于上传大小的限制分开了上传。覆盖SWT技术的各个方面,从最基本的简单概念到SWT线程的高级知识,再到SWT的扩展JFace,然后到RCP的应用。本书内容涵盖SWT的各个方面,是对SWT内容体系的整体总结。

    Eclipse_Swt_Jface_核心应用_part01_of_19

    本书全面介绍了SWT、JFace和RCP的相关知识。全书共分5篇,第1篇介绍了SWT产生的背景以及SWT的一些基本概念和基础知识。第2篇介绍了SWT基本控件的使用,以及事件处理、布局等SWT基本知识的应用。第3篇介绍了关于SWT的...

    rcp技术文档,包含了swt,jface的开发案例

    详细描述了eclipse插件开发,有实例说明,其中包括了,rcp于SWT,JFACE组合实现插件开发的过程,逐步介绍了面向界面的开发过程=========================================...

    swt&jface api

    帮助开发rcp应用程序的swt&jface api文档

    SWT/JFace核心应用源代码

    SWT/JFACE核心应用一书的配套源代码

    Eclipse SWTJFace核心应用光盘内容及其应用的jar包

    Eclipse SWT/Jface核心应用》全面介绍了SWT、JFace和RCP的相关知识。全书共分5篇,第1篇介绍了SWT产生的背景以及SWT的一些基本概念和基础知识。第2篇介绍了SWT基本控件的使用,以及事件处理、布局等SWT基本知识的...

    swt/jface书附带代码

    java开发利器 eclipse swt/jface核心应用书中源代码

    The.Definitive.Guide.to.SWT.and.JFace.eBook-LiB

    The.Definitive.Guide.to.SWT.and.JFace.eBook-LiB [SWT/JFace开发指南]

Global site tag (gtag.js) - Google Analytics