ScalaGUI

来源:百度文库 编辑:神马文学网 时间:2024/04/29 20:53:07

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 = truecolumns = 25subscribe(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.  source: http://scala.sygneca.com/code/scalagui