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