scala/ScalaBook/chapter-06/comboBox.scala

import scala.swing._
import scala.swing.event._
object dialog extends SimpleGUIApplication {
  import scala.collection.mutable.HashMap
  var quiz = Map("Greece"  -> "Athens",
                 "Germany" -> "Berlin",
                 "Italy"   -> "Rome",
                 "France"  -> "Paris",
                 "Japan"   -> "Tokyo",
                 "Canada"  -> "Ottawa")                 
  def top = new MainFrame {
    title = "Simple Questions Game"
    val prompt_label = new Label {
      text = "Choose a sentence and say if its true"
      font = new java.awt.Font("Verdana",java.awt.Font.BOLD, 22)
    }
    val answer_label = new Label {
      text = ""
      font = new java.awt.Font("Verdana",java.awt.Font.BOLD, 22)
    }
    var capital = "Athens"
    var country = "Greece"
    val countries = new ComboBox(List("Greece","Germany","Italy","France","Japan","Canada"))
    countries.font = new java.awt.Font("Verdana",java.awt.Font.PLAIN, 18)
    val capitals = new ComboBox(List("Athens","Bonn","Rome","Paris","Kyoto","Montréal"))
    capitals.font = new java.awt.Font("Verdana",java.awt.Font.PLAIN, 18)
    val questions = new FlowPanel {
      contents += capitals
      val connector = new Label {
        text = " is the capital of "
        font = new java.awt.Font("Verdana",java.awt.Font.PLAIN, 18)
      }
      contents += connector
      contents += countries
      background = java.awt.Color.lightGray
      reactions += {
        case SelectionChanged(`countries`) => 
          country = countries.selection.item
        case SelectionChanged(`capitals`) =>
          capital = capitals.selection.item
      }
      listenTo(countries.selection,capitals.selection)
    }
    val true_button = new Button {
    text = "True"
    font = new java.awt.Font("Verdana",java.awt.Font.BOLD, 22)
    }
    val false_button = new Button {
    text = "False"
    font = new java.awt.Font("Verdana",java.awt.Font.BOLD, 22)
    }
    val answer_buttons = new BoxPanel(Orientation.Horizontal) {
      contents.append(true_button,Swing.HStrut(20),false_button)
      background = java.awt.Color.lightGray
    } 
    contents = new GridBagPanel {
      var c = new Constraints
      c.gridwidth = java.awt.GridBagConstraints.REMAINDER
      add(prompt_label,c)
      add(Swing.VStrut(20), c)
      add(questions,c)
      add(Swing.VStrut(20), c)
      add(answer_buttons, c)
      add(Swing.VStrut(20), c)
      add(answer_label,c)
      background = java.awt.Color.lightGray 
      border = Swing.EmptyBorder(50, 50, 50, 50)
    }
    listenTo(true_button,true_button)
    reactions += {
      case ButtonClicked(b) => 
        if ( b.eq(true_button) ) {
          if ( quiz(country) == capital )
            answer_label.text = "Correct answer!"
          else 
            answer_label.text = "Wrong answer!"
        }
        else if ( b.eq(false_button) ) {
          if ( quiz(country) == capital )
            answer_label.text = "Wrong answer!"
          else 
            answer_label.text = "Correct answer!"
        }
    }
  }
}