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
不错 支持原创