日期:2014-05-16  浏览次数:21003 次

Apache Pivot初体验(一)
    Apache已经将Pivot升级为顶级项目,虽然从前不知道这个项目,但是看来还是有发展前途的。我看好它,因为我对FLEX语法实在不感冒,还是Java写着舒服。似乎也很少有人用AWT/Swing做商业产品,但Applet的应用还是常见的。就研究研究Pivot吧。
    既然Apache将其定位为RIA in Java,做J2EE的还是关注下吧。这是纯Java血统的东西(相比于FLEX),下了开发包,看例子,语法类似Swing,还是比较容易接受的。但是官方例子中没有完整的目录结构,构建开发环境还是留下了一些障碍。可能是之前没有接触过。我自己摸索了一个适应web开发的目录结构,可能不是最好的,但是是可行的。如下:

    这里用了ANT进行jar打包,之前用Eclipse的导出打包不好用,就自己写了个ANT构建脚本运行,还真好用了。
    目录结构还是传统的web项目,不同的是webapp下也放置了lib,当然就是运行项目所需的lib库,如果放到WEB-INF/lib下,那页面是不能直接访问到的,而pivot程序是直接在页面显示调用类库的,就需要放到可见的位置。不过我是在WEB-INF/lib下也放置了一份,那里的在编译路径里的,这样不冲突,也为ANT构建省去来回设置类路径的麻烦。jar包也不大,基本的才1.29M,没有办法,谁让人家是RIA呢。
    先从Java Application开始吧,我是参照官方示例学习的。但是如果你刚下载开发包,估计得看上一阵子呢。其实很简单,就是一个类,一个XML配置文件(Pivot中是以wtkx作为扩展名的)。下面用代码来说明,更为直观。
package pivot.tutorials.hellowtkx;

import org.apache.pivot.collections.Map;
import org.apache.pivot.wtk.Application;
import org.apache.pivot.wtk.DesktopApplicationContext;
import org.apache.pivot.wtk.Display;
import org.apache.pivot.wtk.Window;
import org.apache.pivot.wtkx.WTKXSerializer;

public class HelloWTKX implements Application {
	private Window window = null;

	public void startup(Display display, Map<String, String> map)
			throws Exception {
		WTKXSerializer wtkxSerializer = new WTKXSerializer();
		window = (Window) wtkxSerializer.readObject(this, "helloWTKX.wtkx.xml");
		window.setTitle("Hello JavaEye");
		window.open(display);
	}

	public boolean shutdown(boolean optional) throws Exception {
		if (window != null) {
			window.close();
		}
		return false;
	}

	public void resume() throws Exception {
	}

	public void suspend() throws Exception {
	}

	public static void main(String[] args) {
		DesktopApplicationContext.main(HelloWTKX.class, args);
	}

}

官方示例中配置文件都以XXX.wtkx形式存在,其实就是XML文档,我就直接以.xml来编辑,这样在Eclipse中可以高亮显示,否则就是普通文本编辑了。配置文件的编写参考官方示例就行了。我还加上了的XML声明。
<?xml version="1.0" encoding="UTF-8" ?>
<Window title="Hello WTKX" maximized="true"
xmlns:wtkx="ttp://pivot.apache.org/wtkx" 
xmlns="org.apache.pivot.wtk">
	<content>
		<Label text="Hello JavaEye! - The Pivot WTKX Application"
			styles="{font:'Arial bold 24',color:'#ff0000',
horizontalAlignment:'center',verticalAlignment:'center'}" />
	</content>
</Window>

    基本的Pivot应用程序都是实现了Application接口,自然也要实现其中的抽象方法。从方法名启动,关闭,唤醒和挂起不难看出这是进程的状态转化方法。负责继承状态改变时的处理。主函数就是Pivot应用程序的执行方式,这都是固定的写法了,传入本类的class和主函数的参数。
    类中定义一个私有属性window,就是Pivot应用程序的窗口对象,在startup方法中进行进程加载启动时的事情。WTKXSerializer类在官方文档中解释为“从XML中加载对象层次结构”,可以看出类似于MXML,控件的定义都是写在配置文件中的。只不过这个XML编码时IDE还不能给出提示。我想是Schema还没有最后固定,编码时只能按照已有定义来编写。程序就可以解析XML了。wtkxSerializer对象读取XML配置文件,并从中获取window实例(window是根元素)。中间可以是业务流程的处理。这里是对window的title进行了设置,编码风格很像Swing。最后一步是window的open()方法,传入display参数。在shutdown()方法中别忘记关闭window就可以了。
    此时程序就可以以Application方式运行了。得到效果:

    第一部分介绍到此结束,第二部分中将介绍Web应用中的Pivot部署和用ANT构建自定义jar包。
    本文系作者本人的探索实践,如有不妥,还望大家指正。
(未完待续)
1 楼 nisen 2010-02-12  
非常棒,支持。

引用
似乎也很少有人用AWT/Swing做商业产品

确实不多,国内用的最多的就是永中了。我觉得jre太大是一个大的因素。因为按照jre的再次发布协议不能更改其中的任何内容。

2 楼 sarin 2010-02-15  
nisen 写道
非常棒,支持。

呵呵,欢迎交流!
3 楼 jacki6 2010-06-22  
不错 支持原创