From 25d87efb94582184b7f2a4f4a29838364a113f15 Mon Sep 17 00:00:00 2001 From: Ingo Maier Date: Sun, 28 Mar 2010 12:28:39 +0000 Subject: Fixed #2803. --- src/swing/scala/swing/Component.scala | 3 +++ src/swing/scala/swing/RichWindow.scala | 2 +- src/swing/scala/swing/Slider.scala | 9 +++++---- src/swing/scala/swing/UIElement.scala | 4 ++++ src/swing/scala/swing/Window.scala | 4 ++-- 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 } -- cgit v1.2.3