summaryrefslogtreecommitdiff
path: root/docs/examples/swing/ComboBoxes.scala
blob: c6ee19013af5a4141431848724f181bcda23e342 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
package examples.swing

import swing._
import event._
import java.util.Date
import java.awt.Color
import java.text.SimpleDateFormat
import javax.swing.{Icon, ImageIcon}

/**
 * Demonstrates how to use combo boxes and custom item renderers.
 *
 * TODO: clean up layout
 */
object ComboBoxes extends SimpleSwingApplication {
  import ComboBox._
  lazy val ui = new FlowPanel {
   	contents += new ComboBox(List(1,2,3,4))

    val patterns = List("dd MMMMM yyyy",
                        "dd.MM.yy",
                        "MM/dd/yy",
                        "yyyy.MM.dd G 'at' hh:mm:ss z",
                        "EEE, MMM d, ''yy",
                        "h:mm a",
                        "H:mm:ss:SSS",
                        "K:mm a,z",
                        "yyyy.MMMMM.dd GGG hh:mm aaa")
    val dateBox = new ComboBox(patterns) { makeEditable() }
    contents += dateBox
    val field = new TextField(20) { editable = false }
    contents += field

    reactions += {
      case SelectionChanged(`dateBox`) => reformat()
    }
    listenTo(dateBox.selection)

    def reformat() {
      try {
        val today = new Date
        val formatter = new SimpleDateFormat(dateBox.selection.item)
        val dateString = formatter.format(today)
        field.foreground = Color.black
        field.text = dateString
      } catch {
        case e: IllegalArgumentException =>
          field.foreground = Color.red
          field.text = "Error: " + e.getMessage
      }
    }


    val icons = try {
      List(new ImageIcon(resourceFromClassloader("images/margarita1.jpg")),
           new ImageIcon(resourceFromClassloader("images/margarita2.jpg")),
           new ImageIcon(resourceFromClassloader("images/rose.jpg")),
           new ImageIcon(resourceFromClassloader("images/banana.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, focused: Boolean, icon: Icon, index: Int) {
  	      component.icon = icon
          component.xAlignment = Alignment.Center
          if(isSelected) {
            component.border = Swing.LineBorder(list.selectionBackground, 3)
          } else {
            component.border = Swing.EmptyBorder(3)
          }
        }
      }
    }
    contents += iconBox
  }

  def top = new MainFrame {
    title = "ComboBoxes Demo"
   	contents = ui
  }
}