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