`
newzai
  • 浏览: 13694 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

用Scala语言编写Apache Pivot 程序

阅读更多

Scala被认为是JVM上的下一代语言的最有潜力的继承者。
Apache Pivot是一个基于RIA的Java GUI框架。
初识 Pivot也就是在其升级到Apache顶级项目的时候,带着好奇心去浏览了一番,发现其在Java GUI框架方便果然是独树一帜,Java很成功,但是在GUI方面确实很失败,从AWT,到Swing,再到现在的JavaFx,很少被Java社区的开发者所接受。而IBM的SWT,虽然在性能和框架体系上声称优越于AWT、Swing等,但是在目前RIA大行其道的情况下,个人觉得有点落伍了,虽然Eclipse e4对SWT新增了不少功能(xwt,databinding),这些功能对于Pivot来说早已经就是天生的了。何况e4现在还是处于不稳定的状态。

上面废话太多,下面的代码演示了如何使用Scala编写一个最简单的Pivot程序。只包含一个PushButton控件和按钮事件处理函数

package cn.dvision.main

import org.apache.pivot.wtk._
import org.apache.pivot.wtkx._
import org.apache.pivot.collections.{Map => PMap} /*重新命名一下,与Predef.Map冲突,带有歧义*/
import cn.dvision.bean._


class PivotWindow extends org.apache.pivot.wtk.Application {

   var window : Window = null
   var button : PushButton = null
   
   def startup( display :Display, properties : PMap[String, String] ) {

		

		val wtkxSerializer = new WTKXSerializer()
		/*从WTKX文件中加载GUI控件对象 并使用 asInstanceOf[T]强制转换为制定的类型的对象 
                                与 Java 的 widow = ( Window) wtkxSerialiser.(...) 相同*/
		window =  wtkxSerializer.readObject(this,"PivotWindow.wtkx").asInstanceOf[Window]

		button = wtkxSerializer.get("button").asInstanceOf[PushButton]
		/*监听Button事件,并设置事件监听的执行内容*/
		listenTo( button ) { (btn : Button) => { 
			Alert.alert( "Click " + btn.getButtonData, window) 
			}
		}
		
		window.open(display)
   	}

  
    def  shutdown( optional : Boolean) : Boolean = {
    	if ( window != null ) window.close
    	
    	return true;
    }

    
    def  suspend() {
    }

    def  resume() {
    }
		/*事件监听辅助函数,向 button增加一个监听函数*/	
   def listenTo ( button : Button ) ( btnPressedFun : ( Button ) => Unit ) : Unit = {
	button.getButtonPressListeners().add( new ButtonPressListener() {
		def buttonPressed( button : Button ) : Unit =  {
			btnPressedFun(button) 
			}
		}
	)}
}

object PivotWindow {
	def main( args : Array[String] ) {
		/*使用classOf获得 class 对象, Java中使用 PivotWindow.class*/
		DesktopApplicationContext.main( classOf[PivotWindow],args)
		
	}
	

}



下面是PivotWindow.wtkx 内容

<Window title="Hello WTKX!" maximized="true"
    xmlns:wtkx="http://pivot.apache.org/wtkx"
    xmlns="org.apache.pivot.wtk">
    <content>
        <PushButton wtkx:id="button" buttonData="Click Me"/>
    </content>
</Window>

 

 

编译:

scalac -classpath pivot-core-1.5.jar;pivot-tools-1.5.jar;pivot-wtk-1.5.jar;pivot-wtk-terra-1.5.jar;.  PivotWindow.scala

 

Scala中,源代码的文件名和类可以不一样,有点类似于C++,而且你可以在同一个源代码文件中放置多个统一等级的类,而不像Java中,需要每个类需要一个独立的文件保存。 PivotWindow.scala 可以使用你喜欢的任何名字命名。

运行:

scala  -classpath pivot-core-1.5.jar;pivot-tools-1.5.jar;pivot-wtk-1.5.jar;pivot-wtk-terra-1.5.jar;. cn.dvision.main.PivotWindow

 

我是把 pviot的jar文件放在和 scala文件相同的目录下的条件下执行 scalac和scala的。

分享到:
评论
8 楼 key232323 2010-08-31  
热切 关注下,

不过我更喜欢groovy,因为不做web应用,唯一的性能问题很少考虑。
7 楼 newzai 2010-08-27  
metadmin 写道
引用
XML定义GUI界面了和数据绑定

这不是什么新玩意了,很多地方开源产品都有了,如GWT。

GWT将Java编译为javascript,思路很不错,运行效果也很好。就是生成的js文件很大。我做的开源软件(http://www.ralasafe.org/zh)就使用GWT的。正打算改用div+css+jquery呢。

E4使用FLASH也是一种好的模式。

但刚才说的模式,相对来说GWT与HTML结合更“天然”一些。毕竟变成了js!

GWT确实是不错,其思路也很好,不过就是不能在桌面上运行,而且在处理Socket,本地资源方面估计就没有 Swing/Applet/Pivot等方便了吧。
每种产品都是用于不同的用户。
SWT和Swing/Pivot不是可以比较的,因为他们站在不用的角度去解决用户的需求。
而Swing和Pivot甚至是JavaFx、SWT等是在同一个角度的,才具有可相比性。
6 楼 newzai 2010-08-27  
当然,我更喜欢的是Pivot的MVC模式和数据绑定模式,天生的。不用手动去刷新屏幕之类的
5 楼 metadmin 2010-08-27  
引用
XML定义GUI界面了和数据绑定

这不是什么新玩意了,很多地方开源产品都有了,如GWT。

GWT将Java编译为javascript,思路很不错,运行效果也很好。就是生成的js文件很大。我做的开源软件(http://www.ralasafe.org/zh)就使用GWT的。正打算改用div+css+jquery呢。

E4使用FLASH也是一种好的模式。

但刚才说的模式,相对来说GWT与HTML结合更“天然”一些。毕竟变成了js!
4 楼 newzai 2010-08-27  
metadmin 写道
JFrame和JApplet共用确实好。但要使用JRE,我觉得在WEB还不够方便。

对于Java在GUI方面的走向,你有什么想法?

依靠官方的GUI,个人觉得只有死路一条,即使是JavaFx。

Java GUI的一个选择是 SWT,另外是找一个开源的支持(比较难)
Pivot是我接触的Java GUI中比较优秀的框架之一,个人觉得只有SWT可以与其媲美一下。
至于 Swing,只从出现了JavaFx以后,可以说,Swing已经被抛弃了。
而JavaFx的口碑也不是很好,在RIA的竞争中,都处于下分。

SWT支持在RIA这边支持不是很好,其它方便和Pivot一样,都是很优秀的。不过在Eclipse E4版本SWT/Jface也可以支持浏览器版本,不是是嵌入到Flash里面执行的。
而且E4也开始支持使用XML定义GUI界面了和数据绑定,但是你要知道XML声明界面和数据绑定在WPF和Pivot中很早就有了,而且Pivot一开始的设计就是使用XML和数据绑定

个人觉得Pivot还是非常有发展前途的,只不过由于其还年轻,关注的人比较少,特别是国内,连个中文社区都没有。
下面附带一个个Pivot WTKX入门文档http://blog.csdn.net/chenxiaohong3905/archive/2010/01/24/5251540.aspx
3 楼 metadmin 2010-08-26  
JFrame和JApplet共用确实好。但要使用JRE,我觉得在WEB还不够方便。

对于Java在GUI方面的走向,你有什么想法?
2 楼 newzai 2010-08-26  
metadmin 写道
我一直在找与Java或者JVM天然结合的,并且可以在WEB端运行,还无需客户端安装JRE的东东。

看了官方网站,Pivot demo没有在我浏览器展现出来(没有JRE,呵呵)
官方网站界面挺漂亮的。

Pivot 运行与桌面,也可以运行于Web(基于JRE),不过使用是同一份程序,不像 Swing,要区分使用JFrame或者JApplet
1 楼 metadmin 2010-08-25  
我一直在找与Java或者JVM天然结合的,并且可以在WEB端运行,还无需客户端安装JRE的东东。

看了官方网站,Pivot demo没有在我浏览器展现出来(没有JRE,呵呵)
官方网站界面挺漂亮的。

相关推荐

    读书笔记:使用Scala语言编写的spark程序初学.zip

    读书笔记:使用Scala语言编写的spark程序初学

    读书笔记:maven构建scala语言编写的spark测试程序.zip

    读书笔记:maven构建scala语言编写的spark测试程序

    基于scala语言编写的SparkSQL

    文档以scala语言编写了sparkSQL查询数据的方式,没有打jar包运行,在spark命令行测试通过

    基于Scala语言的Apache Spark学习与实践源码

    本项目是基于Scala语言开发的Apache Spark学习与实践源码,共包含53个文件。其中,Scala源代码文件21个,文本文件7个,XML文件5个,Markdown文档5个,JSON配置文件3个,Avro Schema文件2个,CSV数据文件2个,...

    scala详细总结

    2. 移动应用程序:Scala 语言可以用于开发移动应用程序,例如使用 Scala Native 开发移动应用程序。 3. 桌面应用程序:Scala 语言可以用于开发桌面应用程序,例如使用 ScalaFX 开发桌面应用程序。 Scala 语言的开发...

    Scala语言规范.pdf

    7. **Scala与Spark的关系**:Apache Spark是构建在Scala之上的大数据处理框架,它的API主要用Scala编写,因此熟悉Scala语言有助于更好地理解和使用Spark。Spark的DataFrame和DataSet API都是基于Scala的,理解Scala...

    尚硅谷大数据之Scala语言核心编程.pdf

    在快速入门章节中,给出了使用IDEA开发“hello, world”程序的示例,并介绍了Scala程序的执行流程,还用Java编写了模拟代码,以此帮助初学者理解Scala语言的基本结构和概念。 书中的知识点还包括了Scala语言的转义...

    读书笔记:学习使用Scala 来编写程序.zip

    读书笔记:学习使用Scala 来编写程序

    spark-recommender, 在 Scala 中使用 Apache Spark 框架,编写了可以扩展的推荐系统.zip

    spark-recommender, 在 Scala 中使用 Apache Spark 框架,编写了可以扩展的推荐系统 火花推荐采用 Scala 框架编写的可以扩展推荐系统,使用了 Apache Spark 框架。实现的算法包括:k-最近邻居带聚类的k-近邻带簇树的...

    spark中用scala编写累加器小程序统计文章中空白行

    spark中用scala编写累加器小程序统计指定文章中的空白行,然后通过split函数通过空格切分文章,输出到指定的目录中。

    基于Scala的Apache Spark REST作业服务器设计源码

    本源码项目是基于Scala的Apache Spark REST作业服务器设计,包含343个文件,主要使用Scala、Shell、Python、JavaScript、Java、CSS和HTML编程语言。该项目是一个为Apache Spark设计的REST作业服务器,旨在提供一种...

    尚硅谷_韩顺平_Scala语言核心编程_PDF密码解除1

    通过编写简单的示例程序,可以快速上手Scala编程。 总的来说,Scala是一门强大且富有创新的语言,它将面向对象和函数式编程的精髓结合在一起,为开发者提供了丰富的工具和概念,以应对现代软件开发的复杂性。学习...

    上手提示:使用新版IDEA+Maven+Scala编写Spark程序

    一旦完成以上步骤,开发者就可以开始使用Scala语言编写Spark程序了。Scala作为一种强类型的语言,其语法简洁且功能强大,非常适合进行函数式编程。 - **使用Scala API**:在编写Spark程序时,可以直接调用Scala API...

    图解,Eclipse+ADT+ScalaIDE用Scala写Android程序

    标题中的“图解,Eclipse+ADT+ScalaIDE用Scala写Android程序”指的是使用Eclipse集成开发环境(IDE),Android Developer Tools (ADT)插件以及ScalaIDE扩展来编写Android应用程序的过程。这个过程涉及了Java语言替代...

    scala语言教程及规范

    Scala是一种多范式编程语言,融合了面向对象和函数式编程的概念。它的设计目标是提供一种更高级别的抽象,使得代码简洁、可读性强,并且能够充分利用并发处理。本教程旨在帮助初学者深入理解Scala语言,并掌握其核心...

    Scala语言规范.zip

    通过深入学习“Scala语言规范.pdf”,你将能全面理解Scala的语法特性、编程理念和最佳实践,从而能够编写出高效、可维护的代码,充分利用其与Java的互操作性和强大的并发能力。无论你是Java开发者希望扩展技能树,...

    Scala语言入门

    这意味着你可以在Scala程序中直接使用Java类库中的任何类和接口,反之亦然。 ##### 3.1 导入Java类 在Scala中,可以使用`import`语句来导入Java类。例如: ```scala import java.util.{Date, Locale} import java...

Global site tag (gtag.js) - Google Analytics