scala/ScalaBook/chapter-06/checkBox.scala
import swing._
import event._
import Swing._
object dialog extends SimpleGUIApplication {
def top = new MainFrame {
title = "Calorie Calculator"
//preferredSize = (,300)
val label = new Label {
text = "Tick foods to compute their calories"
font = new java.awt.Font("Verdana",
java.awt.Font.BOLD, 22)
}
val result_label = new Label {
text = ""
font = new java.awt.Font("Verdana",
java.awt.Font.BOLD, 22)
}
var cal_button = new Button {
text = "Calories"
font = new java.awt.Font("Verdana",java.awt.Font.BOLD, 22)
}
var reset_button = new Button {
text = "Reset"
font = new java.awt.Font("Verdana",java.awt.Font.BOLD, 22)
}
var cals = 0
val banana = new CheckBox("banana")
val watermelon = new CheckBox("watermelon")
val broccoli = new CheckBox("broccoli")
val coffee = new CheckBox("coffee")
val cheese = new CheckBox("cheese")
val veal = new CheckBox("veal")
val lamb = new CheckBox("lamb")
var foods = new BoxPanel(Orientation.Vertical) {
border = CompoundBorder(TitledBorder(EtchedBorder, "Foods"), EmptyBorder(5,5,5,10))
banana.background = java.awt.Color.lightGray
watermelon.background = java.awt.Color.lightGray
broccoli.background = java.awt.Color.lightGray
coffee.background = java.awt.Color.lightGray
cheese.background = java.awt.Color.lightGray
veal.background = java.awt.Color.lightGray
lamb.background = java.awt.Color.lightGray
contents.append(banana,watermelon,broccoli,
coffee,cheese,veal,lamb)
background = java.awt.Color.lightGray
listenTo(banana,watermelon,broccoli,coffee,cheese,
veal,lamb)
reactions += {
case ButtonClicked(`banana`) =>
if ( ! banana.peer.isSelected() )
cals -= 72
else
cals += 72
case ButtonClicked(`watermelon`) =>
if ( ! watermelon.peer.isSelected() )
cals -= 37
else
cals += 37
case ButtonClicked(`broccoli`) =>
if ( ! broccoli.peer.isSelected() )
cals -= 11
else
cals += 11
case ButtonClicked(`coffee`) =>
if ( ! coffee.peer.isSelected() )
cals -= 1
else
cals += 1
case ButtonClicked(`cheese`) =>
if ( ! cheese.peer.isSelected() )
cals -= 69
else
cals += 69
case ButtonClicked(`veal`) =>
if ( ! veal.peer.isSelected() )
cals -= 146
else
cals += 146
case ButtonClicked(`lamb`) =>
if ( ! lamb.peer.isSelected() )
cals -= 218
else
cals += 218
}
}
var mybuttons = new BoxPanel(Orientation.Horizontal) {
contents.append(cal_button,Swing.HStrut(20),reset_button)
background = java.awt.Color.lightGray
}
contents = new GridBagPanel {
var c = new Constraints
c.gridwidth = java.awt.GridBagConstraints.REMAINDER
add(label,c)
add(Swing.VStrut(20), c)
add(foods, c)
add(Swing.VStrut(20), c)
add(mybuttons, c)
add(Swing.VStrut(20), c)
add(result_label, c)
background = java.awt.Color.lightGray
border = Swing.EmptyBorder(50, 50, 50, 50)
}
listenTo(cal_button,reset_button)
reactions += {
case ButtonClicked(b1) => if(b1.eq(cal_button)) {
result_label.text = "Total calories: "+cals
}
}
reactions += {
case ButtonClicked(b2) => if(b2.eq(reset_button)) {
cals = 0
banana.peer.setSelected(false)
watermelon.peer.setSelected(false)
broccoli.peer.setSelected(false)
coffee.peer.setSelected(false)
cheese.peer.setSelected(false)
veal.peer.setSelected(false)
lamb.peer.setSelected(false)
result_label.text = ""
}
}
}
}