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 程序。下面还是以例子进行说明吧。 阅读全文 >>

类别: Groovy. 标签: , . 阅读(245). 评论(5) »

Unmi 学习 Groovy 之 Groovy 和 Swing

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

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

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

类别: Groovy. 标签: , . 阅读(189). 评论(3) »

Unmi 学习 Groovy 之 GroovyMarkup (二)

在前一篇 Unmi 学习 Groovy 之 GroovyMarkup (一) 引入了 GroovyMarkup 及介绍了其中的一个 Builder(MarkupBuilder) 的用法。本篇继续。

groovy.util.NodeBuilder,用来创建一般任意对象的树状结构。看到了,它不在 groovy.xml 包之下,但它是一个 Builder,所以秉承了 Builder 的语法规则,而且还可用路径(对象导航)的方式来访问这个 Builder 实例中的节点或属性值。还是来看例子:

import groovy.util.NodeBuilder;

someBuilder = new NodeBuilder();            //只有这么一个构建方法

root = someBuilder.users([balance:100]){    //这一块的语法完全同 MarkupBuilder
	user([gender:"male"],"Unmi");
	user("Joe"){
		order(item:"Book");
	}
}

println root;                     //因为 NodeBuilder 不预示着输出,所以需要显示的 println

看看上面程序的输出: 阅读全文 >>

类别: Groovy. 标签: , . 阅读(84). 评论(0) »

Unmi 学习 Groovy 之 GroovyMarkup (一)

每一种语言都不能忽略了 XML 操作相关的 API,而 Groovy 把使用 XML 的美妙和简易性推向了极致,这就是 GroovyMarkup。它不仅简化了 SAX、DOM 操作,并且把这一理念引入到了 Swing、Swt 界面绘制领域中,Ant、Maven 构建脚本生成中;甚至铺散到更广阔的领域。

Groovy 用闭包和命名参数给标记数据的操作创建通用的语法。GroovyMarkup 在实际的应用中表现为各种 Builder。例如在 Groovy 中内建了以下几个 Builder。

·groovy.xml.MarkupBuilder  --  将你的对象序列化成 XML 或 XHTML
·groovy.xml.SAXBuilder       --  可以用于现有的 SAX 处理器
·groovy.xml.DOMBuilder     --  创建并解析 DOM 文档

而且 GroovyMarkup 语法已经被公认为对操作特定于领域的对象结构很有价值,例如 Ant 文件和 Swing 用户界面。 阅读全文 >>

类别: Groovy. 标签: , . 阅读(92). 评论(0) »

Unmi 学习 Groovy 之模板

提起模板,在 Java 领域中无疑会让人想起 Velocity 和 FreeMarker,可也不要忽略了,和我们最早打交道的 JSP 其实也是一种模板。模板一般都用来作为数据显示分离的显示部分,即 MV 的 V。比如说我目前在 Web 展示和发送邮件时较多的用到模板。通常模板用占位符创建的一个文本,或者串文本、输入流等。这些占位符可以用自己的流程控制代码,所以相应的就有的各种模板语言,例如 VTL(Velocity Template Language)、FTL(FreeMarker Template Language)、自然 JSP 也有算上。

有了模板,再把模型数据和模板进行归并就能得到我们真正想要的数据展现了,这当中的工作就是叫做模板引擎的干的。Groovy 中包含了抽象的 groovy.text.TemplateEngine 类和 groovy.text.Template 接口。可见 Groovy 表现的很开放,它们使得将任何模板引擎插入到 Groovy 中成为可能,比如 Velocity 或者 FreeMarker 引擎,可惜现在还没有。 阅读全文 >>

类别: Groovy. 标签: . 阅读(167). 评论(0) »

Unmi 学习 Groovy 之 Groovlet

在 Java 领域中我们结识过多个 XXXlet 的东西,比如 Applet、Servlet、Scriptlet,这里的 let 作为一个后缀,代表小的意思,或者引申为简短、精巧。

Applet  ---- Application let 小应用程序
Servlet  ---- Service let 小服务程序
Scriptlet ---- Script let  一小段脚本,在 jsp 中用这样的标签 <jsp:scriptlet>

另外还有一种叫做 text/x-scriptlet 的 MIME 类型。

而本篇所要介绍的角色也用了 let 后缀,叫做 Groovlet,不能简单识作为 Groovy let ---- 小 Groovy 程序。不尽对,确切来说它是 GroovyServlet、进一步 Groovy Service let 的简称,没错,它实质上也是一个 Servlet,也就是 Servlet 的扩展。简单讲就是用 Groovy 脚本替代 Java 语言来写 Servlet 程序,再明白点讲就是:比如我们在浏览器中用 http://localhost:8080/groovlet/hello.groovy 访问某个脚本就像访问某个 php/perl 一样的效果。 阅读全文 >>

类别: Groovy. 标签: , . 阅读(90). 评论(0) »

Unmi 学习 Groovy 之多线程

Java 的一个很值得称道的特性是在语言级支持多线程。定义了 Runnable 接口,并在根类 Object 中提供了 wait/notify 方法,还有 synchronized 关键字的支持。我们常说实现多线程的方式有两种:继承 Thread 和实现 Runnable,实质上工作者线程执行的都是 Runnable 接口中定义的 run() 方法,Thread 本身实现了 Runnable 接口,它不过是为线程的调度使用提供了许多有用的方法。

而 Groovy 作为 Java 家族的皇储(安心做储君就行了),多线程方面自然不会甘拜下风。Groovy 通过 MetaClass 对 java.lang.Thread 进行了扩展,即所谓的 GDK - Groovy methods added to Java SE classes。

在原 java.lang.Thread 类中增加了两个方法,分别是: 阅读全文 >>

类别: Groovy. 标签: , . 阅读(223). 评论(0) »

Unmi 学习 Groovy 之数据库操作一

不夸张的说,Groovy 在使用 JDBC 对数据库的操作上是简化到了极致。Groovy 中的 SQL 支持在 groovy.sql 包中,而其中最耀眼的明星就数 groovy.sql.Sql 了。

现在我们就来体验一下 GroovySQL 给我们带来的快感。这里所用的示例数据库是 derbyDB, JDK 1.6 中附带了这个数据库(叫做 JavaDB),MyEclipse 6.X 也带了 DerbyDB。假设我们把它安装在 C:\Java\JavaDB,那么在 C:\Java\JavaDB\demo\databases 下有一个 toursdb(目录) 数据库。我们就用这个,当然你可以使用你手边已有的或最拿手的数据库。 阅读全文 >>

类别: Groovy. 标签: . 阅读(710). 评论(1) »

Unmi 学习 Groovy 之文件操作

一:Java 与 Groovy 读文件操作比较

Groovy 对 java.io.File 进行了扩展,增加了一些接受闭包参数和简化文件操作的方法。作为对比,我们还是先来看看 java 中读取文件的两种常方法,分别是行读取和字节缓冲区读取:

//--BufferedReader 行读取
BufferedReader br = null;
try {
	br = new BufferedReader(new FileReader("foo.txt"));
	List<String> content = new ArrayList<String>();
	String line = null;
	while((line=br.readLine())!=null){
		content.add(line);
	}
} catch (FileNotFoundException e) {
} catch(IOException e){
} finally{
	if(br != null){
		try {
			br.close();
		} catch (IOException e) {
		}
	}
}
//--借助于 buffer 缓冲区来读字节
InputStream is = null;
try {
	is = new FileInputStream("foo.txt");
	StringBuffer content = new StringBuffer();
	int read = -1;
	byte[] buffer = new byte[1024];
	while((read=is.read(buffer))!=-1){
		content.append(new String(buffer,0,read));
	}
} catch (FileNotFoundException e) {
} catch(IOException e){
} finally{
	if(is != null){
		try {
			is.close();
		} catch (IOException e) {
		}
	}
}

从上面可看到,采用 Java 传统方式来读取文件内容,不仅代码行多,而且还必须自己用 try/catch/finally 来处理异常和资源的关闭。现在马上来看看 Groovy 完成以上工作的代码是怎么的,只要一行代码: 阅读全文 >>

类别: Groovy. 标签: , . 阅读(473). 评论(5) »

Unmi 学习 Groovy 之闭包与资源、异常处理

闭包还为我们提供了改善处理复杂 try/catch/finally 结构的方法。利用闭包,很容易编写正确处理资源和异常的代码。使用闭包的新方法已经添加到处理文件、进程和数据库连接的标准 Java 类中。当它们用在 Groovy 中的时候,不必处理和担心资源的关闭。首先我们来看看 Groovy 实现这一方式的原理。我们假设有这么一个资源处理类。

class Resource{
	public Resource(String resourceName) throws ResourceException{
		//open the resource
	}

	public Object read() throws ResourceException{
		//return data or false as the end marker
	}

	public void close() throws ResourceException{
		//close the resource
	}
}

那么我们的打开、读取和关闭资源的典型的 Java 代码看起来就像这样: 阅读全文 >>

类别: Groovy. 标签: , . 阅读(151). 评论(4) »
Page 1 of 212