Home

Responding to an event

Responding to an event

In our second program, gui2.scala, we learn how to program a response to an event. We will do something unusual, and simply fill the entire window with a button:

import scala.swing._

class UI extends MainFrame {
  title = "GUI Program #2"
  preferredSize = new Dimension(320, 240)
  contents = Button("Press me, please") { println("Thank you") }
}

object GuiProgramTwo {
  def main(args: Array[String]) {
    val ui = new UI
    ui.visible = true
  }
}
When we run the program, it looks similar to the previous one, but the color of the window is different, and when you move the mouse over it you notice that it is actually a large button:

Screenshot of GuiProgramTwo

When you press the button, the text "Thank you" appears on the terminal. Try it!

Note how we set this up:

  contents = Button("Press me, please") { println("Thank you") }
The Button function constructs a Button object. It takes two argument lists. The first argument list contains just the text that will appear inside the button. The second argument list contains an action that will occur when the button is pressed. There is something funny about this second argument list: The operation println is not executed when the Button function is called. Instead, the operation is interpreted as a function object, to be used when the button is pressed.

By the way, we could have written the second argument list with the usual syntax with round parentheses:

  contents = Button("Press me, please")(println("Thank you"))
It is customary, however, in this case to write the action in curly braces as we did above, to make it more clear that this is a function object that is being stored to be used in the future.