Unmi 学习 Groovy 之 Groovy 和 Swing

选择一种动态脚本语言,不仅仅是用它来执行一些控制台或是后台任务,还希望能快速建立 GUI 程序,开发自己的小巧实用的工具。而 Groovy 借助于 GroovyMarkup,并巧妙的结合了 Java 2 与生俱来的 Swing 来创建用户图形界面。当界面程序执行过程中,可直接修改脚本代码来调整显示和功能,无须再编译,比之 Java Swing 程序来的便捷。

其实这还应该是 GroovyMarkup 的内容,本篇也可以叫之 《Unmi 学习 Groovy 之 GroovyMarkup (三)》

Groovy 提供了 SwingBuilder 标记类,它使得创建 Swing 用户界面比 Java 更快,代码更省。当然程序的执行性能在小程序方面已无所谓轻重了。还是以实际例子为见:

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

上面程序看到 builder.frame 和 builder.optionPane、panel、label 等等就是注册在 SwingBuilder 上的一些 Widget,可以 SwingBuilder 的源码上看到,下面是 SwingBuilder 的代码片断:

毫无疑问,前面的窗口程序改为用标准的 Java 代码来实现会多很多行的代码(会是两倍)。SwingBuilder 类有着映射到标准 Swing 组件的方法,frame() 方法创建了 javax.swing.JFrame,panel() 方法是 javax.swing.JPanel 等等。请联系着 Java 写的 Swing 程序来理解这些方法的 Map 参数和闭包的意义,写过 Swing 程序的朋友看懂它们不会有任何问题。

除了标准的 Swing 组件外,还可以在 groovy.swing.impl 包中找到 TableLayout 组件,我们可以利用它像在网页中画表格那样画 Swing 的表格。

执行该程序的界面如下:GroovySwing2.JPG
实际应用中还应深入发掘 tableLayout
、tr、td、等方法可以接受什么命名参数
和闭包。对于做过 Web 应用程序开发的
人员来说,这是一个值得关注的选择。

实际我们在 Swing 中应用 JTable 时,会应用 MVC 模式,所以基本要用到  javax.swing.table.TableModel,Groovy 操作 JTable 也不例如。还是看例子:

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

表行记录是一个 Map 的 users 列表。表
模型通过 tableModel 方法在 table() 闭
包内部定义。模型为每列都定义了
一个closureColumn() 方法,它接受包含
下列数据的 map 参数:
header -- 列表题
read -- 填充表的闭包
write -- 结构中更新数据的一个可先闭包。
如果没有定义 write 参数,列被视为只读
,反之为可编辑,如适于修改单元格数据
即更新数据库中记录。
注意 write 闭包的两个参数:旧数据的
map 和指定的新值。

参考:1. 《Java  脚本编程 语言、框架与模式》 第 5 章,高级的 Groovy 编程

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

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

Subscribe
Notify of
guest

3 Comments
Inline Feedbacks
View all comments
Bill
Bill
15 years ago

博主的版面很漂亮,能否请教一下博主是通过后台管理直接录入的还是通过什么软件来整理的?尤其是代码部分,如果直接写HTML肯定会累死人的!

隔叶黄莺
15 years ago

看这个 基于 dp.SyntaxHighlighter 写的代码着色工具(增加了对 Groovy 的支持)

http://www.blogjava.net/Unmi/archive/2008/09/01/226033.html

你就知道了。

Bill
Bill
15 years ago

十分感谢!