scala/ScalaBook/chapter-06/comboIcons.scala
import scala.swing._
import scala.swing.event._
import javax.swing.{Icon, ImageIcon}
object dialog extends SimpleGUIApplication {
val fruits = Array("apples","kiwifruits","peaches","pomegranates")
val icon_menu = new FlowPanel {
val icons = try {
List(new ImageIcon(resourceFromClassloader("images/apples.jpg")),
new ImageIcon(resourceFromClassloader("images/kiwi.jpg")),
new ImageIcon(resourceFromClassloader("images/peaches.jpg")),
new ImageIcon(resourceFromClassloader("images/pomegranate.jpg")))
} catch {
case _ =>
println("Couldn't load images for combo box")
List(Swing.EmptyIcon)
}
val iconBox = new ComboBox(icons) {
renderer = new ListView.AbstractRenderer[Icon, Label](new Label) {
def configure(list: ListView[_], isSelected: Boolean,
hasFocus: Boolean, icon: Icon, index: Int) {
component.icon = icon
list.selectionBackground = java.awt.Color.green
component.xAlignment = Alignment.Center
if(isSelected)
component.border = Swing.LineBorder(list.selectionBackground, 3)
else
component.border = Swing.EmptyBorder(3)
}
}
}
contents += iconBox
reactions += {
case SelectionChanged(`iconBox`) =>
likes.text = "So you like " + fruits(iconBox.selection.index) + "!"
}
listenTo(iconBox.selection)
}
val prompt_label = new Label(
val likes = new Label {
text = ""
font = new java.awt.Font("Verdana",java.awt.Font.BOLD, 22)
}
def top = new MainFrame {
title = "ComboBoxes with Icons"
preferredSize = (375,375)
contents = new GridBagPanel {
var c = new Constraints
c.gridwidth = java.awt.GridBagConstraints.REMAINDER
add(prompt_label,c)
add(Swing.VStrut(20),c)
add(icon_menu,c)
add(Swing.VStrut(20),c)
add(likes,c)
}
}
}
//scala -cp comboIcons.jar:images.jar dialog