fswdnr 发表于 2017-1-5 08:46:40

用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 ) {

val wtkxSerializer = new WTKXSerializer()
/*从WTKX文件中加载GUI控件对象 并使用 asInstanceOf强制转换为制定的类型的对象
                              与 Java 的 widow = ( Window) wtkxSerialiser.(...) 相同*/
window =wtkxSerializer.readObject(this,"PivotWindow.wtkx").asInstanceOf
button = wtkxSerializer.get("button").asInstanceOf
/*监听Button事件,并设置事件监听的执行内容*/
listenTo( button ) { (btn : Button) => {
Alert.alert( "Click " + btn.getButtonData, window)
}
}
window.open(display)
}

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

defsuspend() {
}
defresume() {
}
/*事件监听辅助函数,向 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 ) {
/*使用classOf获得 class 对象, Java中使用 PivotWindow.class*/
DesktopApplicationContext.main( classOf,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的。
页: [1]
查看完整版本: 用Scala语言编写Apache Pivot 程序