summaryrefslogtreecommitdiff
path: root/src/swing
diff options
context:
space:
mode:
authorIngo Maier <ingo.maier@epfl.ch>2010-03-28 12:28:39 +0000
committerIngo Maier <ingo.maier@epfl.ch>2010-03-28 12:28:39 +0000
commit25d87efb94582184b7f2a4f4a29838364a113f15 (patch)
treea44ccb4aea4c2ed112b3eeb18af29f60198e676c /src/swing
parentf349e24ea0e386fc8ad4a768251454256fb34dc0 (diff)
downloadscala-25d87efb94582184b7f2a4f4a29838364a113f15.tar.gz
scala-25d87efb94582184b7f2a4f4a29838364a113f15.tar.bz2
scala-25d87efb94582184b7f2a4f4a29838364a113f15.zip
Fixed #2803.
Diffstat (limited to 'src/swing')
-rw-r--r--src/swing/scala/swing/Component.scala3
-rw-r--r--src/swing/scala/swing/RichWindow.scala2
-rw-r--r--src/swing/scala/swing/Slider.scala9
-rw-r--r--src/swing/scala/swing/UIElement.scala4
-rw-r--r--src/swing/scala/swing/Window.scala4
5 files changed, 15 insertions, 7 deletions
diff --git a/src/swing/scala/swing/Component.scala b/src/swing/scala/swing/Component.scala
index cec47f6589..1f1a646db5 100644
--- a/src/swing/scala/swing/Component.scala
+++ b/src/swing/scala/swing/Component.scala
@@ -79,6 +79,9 @@ abstract class Component extends UIElement {
}
}
+ def name: String = peer.getName
+ def name_=(s: String) = peer.setName(s)
+
/**
* Used by certain layout managers, e.g., BoxLayout or OverlayLayout to
* align components relative to each other.
diff --git a/src/swing/scala/swing/RichWindow.scala b/src/swing/scala/swing/RichWindow.scala
index e6066cef7e..a28794c6c1 100644
--- a/src/swing/scala/swing/RichWindow.scala
+++ b/src/swing/scala/swing/RichWindow.scala
@@ -53,7 +53,7 @@ sealed trait RichWindow extends Window {
* The menu bar of this frame or `NoMenuBar` if no menu bar is set.
*/
def menuBar: MenuBar = {
- val m = UIElement.cachedWrapper(peer.getJMenuBar)
+ val m = UIElement.cachedWrapper[MenuBar](peer.getJMenuBar)
if (m != null) m else MenuBar.NoMenuBar
}
/**
diff --git a/src/swing/scala/swing/Slider.scala b/src/swing/scala/swing/Slider.scala
index 8a257acc8b..793f5eb5bb 100644
--- a/src/swing/scala/swing/Slider.scala
+++ b/src/swing/scala/swing/Slider.scala
@@ -52,10 +52,11 @@ class Slider extends Component with Orientable.Wrapper with Publisher {
def adjusting = peer.getValueIsAdjusting
- def labels: scala.collection.Map[Int, Label] =
- new scala.collection.JavaConversions.JMapWrapper[Int, JLabel](
- peer.getLabelTable.asInstanceOf[java.util.Hashtable[Int, JLabel]])
- .mapValues(v => (UIElement cachedWrapper v).asInstanceOf[Label])
+ def labels: scala.collection.Map[Int, Label] = {
+ val labelTable = peer.getLabelTable.asInstanceOf[java.util.Hashtable[Int, JLabel]]
+ new scala.collection.JavaConversions.JMapWrapper(labelTable)
+ .mapValues(v => UIElement.cachedWrapper[Label](v))
+ }
def labels_=(l: scala.collection.Map[Int, Label]) {
// TODO: do some lazy wrapping
val table = new java.util.Hashtable[Any, Any]
diff --git a/src/swing/scala/swing/UIElement.scala b/src/swing/scala/swing/UIElement.scala
index 6ebf8b865b..0d15e12979 100644
--- a/src/swing/scala/swing/UIElement.scala
+++ b/src/swing/scala/swing/UIElement.scala
@@ -31,6 +31,10 @@ object UIElement {
* Java Swing peer. If this method finds one of the given type `C`,
* it will return that wrapper. Otherwise it returns `null`. This
* method never throws an exception.
+ *
+ * Clients should be extremely careful with type parameter `C` and
+ * its interaction with type inference. Better err on the side of caution
+ * and explicitly specify `C`.
*/
private[swing] def cachedWrapper[C>:Null<:UIElement](c: java.awt.Component): C = {
val w = c match {
diff --git a/src/swing/scala/swing/Window.scala b/src/swing/scala/swing/Window.scala
index f0a4927f01..4e8f687a71 100644
--- a/src/swing/scala/swing/Window.scala
+++ b/src/swing/scala/swing/Window.scala
@@ -39,7 +39,7 @@ abstract class Window extends UIElement with RootPanel with Publisher { outer =>
peer.pack() // pack also validates, which is generally required after an add
}
def defaultButton: Option[Button] =
- toOption(peer.getRootPane.getDefaultButton) map UIElement.cachedWrapper
+ toOption(peer.getRootPane.getDefaultButton) map UIElement.cachedWrapper[Button]
def defaultButton_=(b: Button) {
peer.getRootPane.setDefaultButton(b.peer)
}
@@ -55,7 +55,7 @@ abstract class Window extends UIElement with RootPanel with Publisher { outer =>
def centerOnScreen() { peer.setLocationRelativeTo(null) }
def location_=(p: Point) { peer.setLocation(p) }
- def owner: Window = UIElement.cachedWrapper(peer.getOwner)
+ def owner: Window = UIElement.cachedWrapper[Window](peer.getOwner)
def open() { peer setVisible true }
def close() { peer setVisible false }