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!"
}
}
}
}