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.
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.