Unmi 学习 Groovy 之 Groovy 和 Swt

如上篇:Unmi 学习 Groovy 之 Groovy 和 Swing,Groovy 应用 Markup、命名参数、匿名构造和闭包很好的支持了 Swing 开发。然而 IBM 当初考虑到 Swing 的表现自行开发了一个界面框架,并已广受开发者青睐,也在 RCP 中得到了发展。Groovy 自然也看到了这一点,有了实际动作,见 http://groovy.codehaus.org/GroovySWT。它通过 SwtBuilder 和 JFaceBuilder 不令提供了对 Swt 的支持,还支持了 Swt 更上一层的 JFace。

要使用 GroovySWT,必须先下载到 groovy-swt-0.3.jar,或用 Eclipse 自带的 swt.jar,或从 Swt 官方网站(http://www.eclipse.org/swt/) 上下载最新的 swt.jar。或者直接下载打包的 groovy-swt-0.3-including-Eclipse-libs.ZIP,其中包含有 groovy-swt-0.3 和 swt/jface 等包。swt/jface 工程的 classpath 设置这里不多说,本文假定你对 Swt 有一定的了解,最好能理解 Swt 的 HelloWorld 程序。下面还是以例子进行说明吧。

Java-Swt 传统方式翻译为 groovy 的写法

执行该程序的界面如下:GroovySwt1.JPG

使用 SwtBuilder 改写上面的程序,并加上了按钮事件处理的功能

执行该程序的界面如下:GroovySwt2.JPG在 button 的闭包中用 onEvent 指示了什么
类型的事件执行什么闭包。

从上面的程序对比上可看出使用了 SwtBuilder 只简化了界面构造的代码,并加上了处理按钮点击的闭包。闭包是作为 shell 的参数,在布局管理方面的代码写法不同于 SwingBuilder,如上篇的

tableLayout{    
    tr{    
        td(align:'center'){ label(text:'Username') }   
        td(align:'center'){ label(text:'Balance') }  
    } 
}

而在 SwtBuilder 中 rowLayout() 和 Label() 是平级的,需要注意到这一点。

最后看一下 Groovy 结合 JFace 应用的例子,JFace 对于 Swt 就如 MFC 和 Windows SDK 的关系。其中用到了 JFaceBuilder。

执行该程序的界面如下GroovySwt3.JPG一个基本的 JFace 应用框架,有主菜单栏,工具栏,主
显示区域和状态栏,可点击菜单看看效果,工具栏上的
按钮设置了快捷方式

更多的关天 GroovySwt 的例子请参见 http://svn.codehaus.org/groovy/trunk/groovy/modules/groovy-swt/src/examples/ 中的演示代码。上面的代码比较分散,为方便下载,本人特地整理打成一个包放在了这里:groovy-swt-examples.rar

参考:http://groovy.codehaus.org/GroovySWT 及其中的例子。

 

本文链接 https://yanbin.blog/unmi-study-groovy-swt/, 来自 隔叶黄莺 Yanbin Blog

[版权声明] Creative Commons License 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。

Subscribe
Notify of
guest

5 Comments
Inline Feedbacks
View all comments
徐尧
徐尧
16 years ago

groovy效率实在是差的可以,估计这个用不起来,groovy还是做胶水比较好使

隔叶黄莺
16 years ago

Groovy 效率肯定是要比 Java 差,我也只是想用 Groovy + Swt 做些实际中要用到的小工具,效率应该不会是个问题,无外乎是在启动的时候慢些。

Matthew Chen
Matthew Chen
16 years ago

closure 对swt中的asynchronous会看起来顺眼点。

philix
philix
15 years ago

groovy的builder实在是太优美了.

隔叶黄莺
15 years ago

关于 Swt和Swing比较 恐怕不用我多加叙说,网上有一大堆。