分享

ScalaGUI

 miqi05 2010-04-05

A Scala framework wrapping Swing.

  • It uses event loops to solve the inversion-of-control problem of Swing’s callback events.
  • It uses multiple-inheritance for clean composition of widget properties.
  • It uses Scala’s capability for embedding domain-specific-language-like elements to provide an easy layout mechanism based on the new “Matisse” layout library.

An example of a simple application follows. Notice amongst other the following.

  • How the event loops are used for reacting to events.
    • How path-based pattern matching is used to segregate between events from different sources.
    • And how these event loops can be put in any element allowing true separation of concerns.
  • How the window is layed-out, by simply specifying constraints between widgets.
package example
 
import scala.gui._
 
object application extends scala.gui.Application {
val mainWindow = new container.Window {
val press = new widget.Button {
text = "Press me, please"
subscribe(this)
toplevel eventloop {
case this.Click() =>
field.text = "Wow! Someone pressed me."
}
}
val say = new widget.Label {
text = "I'm here for your information"
toplevel eventloop {
case press.Click() =>
text = "Hey! Button was pressed ;-)"
}
subscribe(press)
}
 
val field = new widget.TextField with behaviour.KeyTracker {
trackingKey = true
columns = 25
subscribe(this)
toplevel eventloop {
case this.TextChanged() =>
Console.println("Text changed")
}
}
 
subscribe(this, press)
 
toplevel eventloop {
case this.Closing() => System.exit(0)
case press.Click() =>
Console.println("Oho, the button was pressed.")
}
lay { new Group {
object buttonGroup extends Group {
beside(press, say)
valign(Alignment.Center)
}
above(buttonGroup, field)
}}
}
}

The Tutorial on Writing Modular Programs in Scala uses ScalaGUI to write a spreadsheet application. The tutorial also demonstrates pattern matching, mixin composition, and other things.

If you want to try out ScalaGUI, you can get it directly (with examples etc.) from the SVN repository.
 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多