先简单介绍一下JFace:
基于Java的图形库最主要的有三种,它们分别是AWT、Swing和SWT;它们产生的时间大体如下:
AWT(abstract windowing toolkit,1995年,随JDK一起,SUN公司) --->Swing(JFC, java foundation classes, 1997年,随JDK一起,sun公司) ---> SWT(standard widget toolkit,2001年,Eclipse子项目,IBM公司)。详见:Java GUI 的发展和演化的概述:http://java.ccidnet.com/art/3577/20060823/877603_1.html
SWT的执行效率非常高。这是由于SWT的底层是由C编写的。由于SWT通过C直接调用系统层的 GUI API。因此,使用SWT编写GUI程序,在外观上就和使用C++、Delphi(在Windows下)编写的程序完全一样。它的这一点和AWT类似。 AWT在底层也是使用C直接调用系统层的GUI API。但它们是有区别的,最大的区别可能就是一个是Sun提供的,一个是Eclipse自带的。这就意味着如果使用AWT,只要机器上安装了JDK或 JRE,发布软件时无需带其它的库。而如何使用SWT,在发布时必须要自带上SWT的*.dll(Windows版)或*.so(Linux/Unix 版)文件以及相关的*.jar包。还有就是它们所提供的图形接口有一些差异。SWT可能更丰富一些,我们可以看看Eclipse的界面就知道了。但随着 Sun对AWT库的不断更新,AWT的图形表现能力也在不断地提高。
虽然SWT很强大,但它比较底层。也就是说它的一些功能在使用上还比较低级,不太符合面向对象的特征。因此,在SWT的基础上又开发了JFace。JFace在SWT上进行了一定的扩展。因此,也可说JFace是基于 SWT的,就象在VC中使用MFC来包装Win32 API一样。
【附】
百度百科:http://baike.baidu.com/view/1500987.htm
http://www.doc88.com/p-51890799597.html
明白了JFace是什么时候,做点东西出来。
首先搭建环境:
1、根据这篇文章http://incan.iteye.com/blog/282500,“和SWT不一样,JFace并没有现成的和Eclipse分开发布。这意味着你必须安装Eclipse以获得JFace。JFace并不要求你在硬盘上保留Eclipse,所以如果愿意的话,你可以自由的将JFace的JAR文件复制到其他目录下,然后将Eclipse删去。JFace的JAR文件全部在eclipse/plugins目录下,分散在不同的JAR文件中:
org.eclipse.jface_3.0.0中的jface.jar
org.eclipse.core.runtime_3.0.0中的runtime.jar
org.eclipse.osgi_3.0.0中的osgi.jar
org.eclipse.jface.text_3.0.0中的jfacetext.jar
org.eclipse.text_3.0.0中的text.jar
你可以将这些文件复制到你喜欢的任何地方,并且必须将这些文件(或者至少是你用到的那些)与你的JFace程序一起发布。你并不需要在每一个程序中都用到所有这些文件,所以可以仅仅发布你的程序所依赖的那部分”
会有这个错误:
Multiple markers at this line
- The hierarchy of the type SaveAsAction is inconsistent
- The type org.eclipse.core.commands.common.EventManagercannot be resolved. It is
indirectly referenced from required .class files
然后我就放弃这个部署(其实和后面这个一样)
2、根据这篇文章http://wenku.baidu.com/view/21dcb624ccbff121dd36837f.html,添加相应的classpath variables,如下图:
Myeclipse/Eclipse --> window -->preferences --> java --> build path -->classpath variables添加如下文件:
然后工程里面导入这些classpath variables:
继续有这个错误:
Multiple markers at this line
- The hierarchy of the type SaveAsAction is inconsistent
- The type org.eclipse.core.commands.common.EventManagercannot be resolved. It is
indirectly referenced from required .class files
到此,我就感觉不是部署有问题了,仔细看看错误提示,原来是缺少这个org.eclipse.core.commands.common.EventManager类,于是按照上面的步骤继续添加一个classpath variables:COMMANDS_LIB;指向 org.eclipse.core.commands_3.5.0.I20090525-2000.jar。
接着又出现一个错误:
The import org.eclipse.core.runtime.IProgressMonitorcannot be resolved
看来需要继续添加classpath variables;不知道这个类被打到那个包里面了,百度一下,发现这篇文章 解决Eclipse 中 org.eclipse.core.runtime.IProgressMonitor 异常
http://hi.baidu.com/xbkaishui/blog/item/ee105a1c6f793405314e1547.html,引用如下:
“最近在看 SWT/JFace 在配置JFace时老是出错 org.eclipse.core.runtime.IProgressMonitor 异常 还有找不到main 方法
SWT/JFace 还是比较难搞的:提供以下解决方法
解决 Exception in thread "main" java.lang.UnsatisfiedLinkError: no swt-win32-3139 in java.library.path
因为SWT使用了JNI调用C,所以你需要把相对应版本的dll文件(swt-win32-xxxx.dll)copy到C:/windows/system32下面.
解决 java.lang.NoClassDefFoundError: org/eclipse/core/runtime/IProgressMonitor
很多人说导入org.eclipse.core.runtime_x.x.x.jar 就ok,但你自己试试就知道并不是所有版本的org.eclipse.core.runtime_x.x.x.jar 里都有IProgressMonitor这个class.
所以即使你导入了org.eclipse.core.runtime_x.x.x.jar 到project也可能无济于事。
去plugins下面找找org.eclipse.equinox.common.x.x.x.jar,然后导入到project ,你会发现IProgressMonitor 悠然的躺在那里。
解决 Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/core/commands/common/EventManager
解决了上面两个问题以为大功告成,其实还差一步。导入org.eclipse.core.commandsx.x.x.jar到project中,我们的第一个SWT/JFace就能跑起来了。
其实用 SWT Designer 就可以避免种种错误 下面说一下JFace 开发中需要导入的包 我的eclipse 是 3.5.0版本的
org.eclipse.jface.text_3.5.2.r352_v20091118-0800.jar
org.eclipse.jface_3.5.2.M20100120-0800.jar
org.eclipse.swt.win32.win32.x86_3.5.2.v3557f.jar
org.eclipse.text_3.5.0.v20090513-2000.jar
org.eclipse.core.commands_3.5.0.I20090525-2000.jar
org.eclipse.core.runtime_3.5.0.v20090525.jar
org.eclipse.equinox.common_3.5.1.R35x_v20090807-1100.Jar
org.eclipse.equinox.registry_3.4.100.v20090520-1800.jar
org.eclipse.osgi_3.5.2.R35x_v20100126.jar
导入如上包 就可安全运行”
这篇文章其实解决了上述所有问题。
【附】网上的一些例子:
https://www.ibm.com/developerworks/cn/opensource/os-jface1/
http://incan.iteye.com/blog/282500
最后,贴一张实现的WordPad程序,(网上找来的开源,网址不记得了)如图:
怎么样?还是那么回事吧。