Java.next:第二部分——与Java的互操作 - 编程入门网
almost right, see below)
import javax.swing._
import java.awt.event.{ActionEvent, ActionListener}
object HelloWorld extends JFrame("Hello Swing") {
def showButtonMessage(msg: String) =
JOptionPane.showMessageDialog(null, String.format("""<html>Hello from <b>Scala</b>. Button %s pressed""", Array(msg)));
def main(args: Array[String]) {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
val button = new JButton("Click Me")
button.addActionListener((e:ActionEvent) => showButtonMessage(e.getActionCommand.toString))
getContentPane add button
pack
setVisible(true)
}
}
Scala版本与Groovy相对Java具有许多相同的优点: ◇ 更少的类型声明 ◇ 更少的分号 ◇ 更少的括号 我们还可以看到Scala独有的一些性质: ◇ 在Scala中import通配符是_而不是熟悉的*。*号具有其它意义 ◇ Scala能够单行引入同一个package中的多个class ◇ 因为我们只需要一个实例,所以我们用object声明而不是class ◇ 该object继承了JFrame,Scala允许我们使用内嵌的方式调用JFrame的构造函数,而不必再单独声明一个构造函数 Java.next:第二部分——与Java的互操作(3)时间:2011-01-29 yeeyan 译: 梦幻泡影露电与Groovy一样,最大的不同是事件******。Scala同样允许我们简单的传入一个匿名函数,而不需要使用匿名内部类。
看起来很强大,只不过这儿我做了一个小小的弊。Scala是强类型语言,它不会自动将一个函数类型转换为一个ActionListener。因此上面的代码还不能被编译通过。幸运的是,Scala的隐式转换功能让我们拥有这个能力:强类型加上一个便利的类型系统。所有我们要做的是告诉Scala这个转换是合法的:
将上面的代码放到适当的位置,我们就能够在需要ActionListener的地方传入一个函数。 已经有多个将Swing包装为Scala的项目。使用这些库,你能够书写更加简洁的代码。作为示例,你可以参看ScalaGUI。 JRuby的实现 现在来看看JRuby的情形:
如果与之前Groovy的代码进行对比,你会发现它们几乎具有相同的特点: ◇ 更少的类型声明 ◇ 更少的分号 ◇ 更少的括号 ◇ 简洁的属性访问(没有getter与setter) ◇ 多行字符串(使用END界定) ◇ 使用${}往字符串里插入it.actionCommand 相比而言,JRuby的ActionListener实现比Groovy稍微简单一点。JRuby能够自动根据block生成ActionListener:
Java.next:第二部分——与Java的互操作(4)时间:2011-01-29 yeeyan 译: 梦 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |