选择一种动态脚本语言,不仅仅是用它来执行一些控制台或是后台任务,还希望能快速建立 GUI 程序,开发自己的小巧实用的工具。而 Groovy 借助于 GroovyMarkup,并巧妙的结合了 Java 2 与生俱来的 Swing 来创建用户图形界面。当界面程序执行过程中,可直接修改脚本代码来调整显示和功能,无须再编译,比之 Java Swing 程序来的便捷。
其实这还应该是 GroovyMarkup 的内容,本篇也可以叫之 《Unmi 学习 Groovy 之 GroovyMarkup (三)》
Groovy 提供了 SwingBuilder 标记类,它使得创建 Swing 用户界面比 Java 更快,代码更省。当然程序的执行性能在小程序方面已无所谓轻重了。还是以实际例子为见:
|
执行该程序的界面如下: |
上面程序看到 builder.frame 和 builder.optionPane、panel、label 等等就是注册在 SwingBuilder 上的一些 Widget,可以 SwingBuilder 的源码上看到,下面是 SwingBuilder 的代码片断:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
public SwingBuilder() { registerWidgets() headless = GraphicsEnvironment.isHeadless() } protected void registerWidgets() { .............. // // standalone window classes // ..................................... registerBeanFactory("fileChooser", JFileChooser) registerFactory("frame", new FrameFactory()) registerBeanFactory("optionPane", JOptionPane) ........................ // // widgets // registerFactory("button", new RichActionWidgetFactory(JButton)) .......................... registerFactory("label", new TextArgWidgetFactory(JLabel)) .................................. registerFactory("textField", new TextArgWidgetFactory(JTextField)) .............................. registerBeanFactory("colorChooser", JColorChooser) .......................... registerBeanFactory("panel", JPanel) ........... registerFactory("table", new TableFactory()) // // Layouts // ..................... registerFactory("flowLayout", new LayoutFactory(FlowLayout)) ........................ registerFactory("springLayout", new LayoutFactory(SpringLayout)) ........................ } |
毫无疑问,前面的窗口程序改为用标准的 Java 代码来实现会多很多行的代码(会是两倍)。SwingBuilder 类有着映射到标准 Swing 组件的方法,frame() 方法创建了 javax.swing.JFrame,panel() 方法是 javax.swing.JPanel 等等。请联系着 Java 写的 Swing 程序来理解这些方法的 Map 参数和闭包的意义,写过 Swing 程序的朋友看懂它们不会有任何问题。
除了标准的 Swing 组件外,还可以在 groovy.swing.impl 包中找到 TableLayout 组件,我们可以利用它像在网页中画表格那样画 Swing 的表格。
|
执行该程序的界面如下: 实际应用中还应深入发掘 tableLayout 、tr、td、等方法可以接受什么命名参数 和闭包。对于做过 Web 应用程序开发的 人员来说,这是一个值得关注的选择。 |
实际我们在 Swing 中应用 JTable 时,会应用 MVC 模式,所以基本要用到 javax.swing.table.TableModel,Groovy 操作 JTable 也不例如。还是看例子:
|
执行该程序的界面如下:
表行记录是一个 Map 的 users 列表。表 |
参考:1. 《Java 脚本编程 语言、框架与模式》 第 5 章,高级的 Groovy 编程
本文链接 https://yanbin.blog/unmi-groovy-swing/, 来自 隔叶黄莺 Yanbin Blog
[版权声明] 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。
博主的版面很漂亮,能否请教一下博主是通过后台管理直接录入的还是通过什么软件来整理的?尤其是代码部分,如果直接写HTML肯定会累死人的!
看这个 基于 dp.SyntaxHighlighter 写的代码着色工具(增加了对 Groovy 的支持)
http://www.blogjava.net/Unmi/archive/2008/09/01/226033.html
你就知道了。
十分感谢!