Skip to content

Commit 08ab007

Browse files
committed
Added a Swing ColorChooser wrapper
1 parent bdff881 commit 08ab007

File tree

3 files changed

+120
-0
lines changed

3 files changed

+120
-0
lines changed
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package examples.swing
2+
3+
import java.awt.{Color, Font, Dimension}
4+
import swing._
5+
import event._
6+
import Swing._
7+
import BorderPanel._
8+
9+
/**
10+
* Demo for ColorChooser.
11+
* Based on http://download.oracle.com/javase/tutorial/uiswing/components/colorchooser.html
12+
*
13+
* @author andy@hicks.net
14+
*/
15+
object ColorChooserDemo extends SimpleSwingApplication {
16+
def top = new MainFrame {
17+
title = "ColorChooser Demo"
18+
size = new Dimension(400, 400)
19+
20+
contents = ui
21+
}
22+
23+
def ui = new BorderPanel {
24+
val colorChooser = new ColorChooser {
25+
reactions += {
26+
case ColorChanged(_, c) =>
27+
banner.foreground = c
28+
}
29+
}
30+
31+
colorChooser.border = TitledBorder(EtchedBorder, "Choose Text Color")
32+
33+
val banner = new Label("Welcome to Scala Swing") {
34+
horizontalAlignment = Alignment.Center
35+
foreground = Color.yellow
36+
background = Color.blue
37+
opaque = true
38+
font = new Font("SansSerif", Font.BOLD, 24)
39+
}
40+
41+
val bannerArea = new BorderPanel {
42+
layout(banner) = Position.Center
43+
border = TitledBorder(EtchedBorder, "Banner")
44+
}
45+
46+
// Display a color selection dialog when button pressed
47+
val selectColor = new Button("Choose Background Color") {
48+
reactions += {
49+
case ButtonClicked(_) =>
50+
ColorChooser.showDialog(this, "Test", Color.red) match {
51+
case Some(c) => banner.background = c
52+
case None =>
53+
}
54+
}
55+
}
56+
57+
layout(bannerArea) = Position.North
58+
layout(colorChooser) = Position.Center
59+
layout(selectColor) = Position.South
60+
}
61+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/* __ *\
2+
** ________ ___ / / ___ Scala API **
3+
** / __/ __// _ | / / / _ | (c) 2007-2012, LAMP/EPFL **
4+
** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ **
5+
** /____/\___/_/ |_/____/_/ | | **
6+
** |/ **
7+
\* */
8+
9+
10+
11+
package scala.swing
12+
13+
import javax.swing.JColorChooser
14+
import event._
15+
16+
/**
17+
* Wrapper for JColorChooser. Publishes `ColorChanged` events, when the color selection changes.
18+
*
19+
* @author andy@hicks.net
20+
* @author Ingo Maier
21+
* @see javax.swing.JColorChooser
22+
*/
23+
object ColorChooser {
24+
def showDialog(parent: Component, title: String, color: Color): scala.Option[Color] = {
25+
toOption[Color](javax.swing.JColorChooser.showDialog(parent.peer, title, color))
26+
}
27+
}
28+
29+
class ColorChooser(color0: Color) extends Component {
30+
def this() = this(java.awt.Color.white)
31+
32+
override lazy val peer: JColorChooser = new JColorChooser(color0) with SuperMixin
33+
34+
peer.getSelectionModel.addChangeListener(new javax.swing.event.ChangeListener {
35+
def stateChanged(e: javax.swing.event.ChangeEvent) {
36+
publish(ColorChanged(ColorChooser.this, peer.getColor))
37+
}
38+
})
39+
40+
def color: Color = peer.getColor
41+
def color_=(c: Color) = peer.setColor(c)
42+
43+
def dragEnabled: Boolean = peer.getDragEnabled
44+
def dragEnabled_=(b: Boolean) = peer.setDragEnabled(b)
45+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
/* __ *\
2+
** ________ ___ / / ___ Scala API **
3+
** / __/ __// _ | / / / _ | (c) 2007-2011, LAMP/EPFL **
4+
** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ **
5+
** /____/\___/_/ |_/____/_/ | | **
6+
** |/ **
7+
\* */
8+
9+
10+
11+
package scala.swing
12+
package event
13+
14+
case class ColorChanged(source: Component, c: Color) extends ComponentEvent with SelectionEvent

0 commit comments

Comments
 (0)