@@ -24,21 +24,21 @@ object ListView {
2424 val MultiInterval = Value (ListSelectionModel .MULTIPLE_INTERVAL_SELECTION )
2525 }
2626
27- def wrap [A ](c : JList ) = new ListView [A ] {
27+ def wrap [A ](c : JList [ A ] ) = new ListView [A ] {
2828 override lazy val peer = c
2929 }
3030
3131 object Renderer {
32- def wrap [A ](r : ListCellRenderer ): Renderer [A ] = new Wrapped [A ](r)
32+ def wrap [A ](r : ListCellRenderer [ A ] ): Renderer [A ] = new Wrapped [A ](r)
3333
3434 /**
3535 * Wrapper for <code>javax.swing.ListCellRenderer<code>s
3636 */
37- class Wrapped [A ](override val peer : ListCellRenderer ) extends Renderer [A ] {
38- def componentFor (list : ListView [_], isSelected : Boolean , focused : Boolean , a : A , index : Int ) = {
37+ class Wrapped [A ](override val peer : ListCellRenderer [ A ] ) extends Renderer [A ] {
38+ def componentFor (list : ListView [_ <: A ], isSelected : Boolean , focused : Boolean , a : A , index : Int ) = {
3939 Component .wrap(peer.getListCellRendererComponent(list.peer, a, index, isSelected, focused).asInstanceOf [JComponent ])
4040 }
41- }
41+ }
4242
4343 /**
4444 * Returns a renderer for items of type <code>A</code>. The given function
@@ -55,8 +55,8 @@ object ListView {
5555 * </code>
5656 */
5757 def apply [A ,B ](f : A => B )(implicit renderer : Renderer [B ]): Renderer [A ] = new Renderer [A ] {
58- def componentFor (list : ListView [_], isSelected : Boolean , focused : Boolean , a : A , index : Int ): Component =
59- renderer.componentFor(list, isSelected, focused, f(a), index)
58+ def componentFor (list : ListView [_ <: A ], isSelected : Boolean , focused : Boolean , a : A , index : Int ): Component =
59+ renderer.componentFor(list. asInstanceOf [ ListView [_ <: B ]] , isSelected, focused, f(a), index)
6060 }
6161 }
6262
@@ -69,11 +69,11 @@ object ListView {
6969 * @see javax.swing.ListCellRenderer
7070 */
7171 abstract class Renderer [- A ] {
72- def peer : ListCellRenderer = new ListCellRenderer {
73- def getListCellRendererComponent (list : JList , a : Any , index : Int , isSelected : Boolean , focused : Boolean ) =
74- componentFor(ListView .wrap[A ](list), isSelected, focused, a. asInstanceOf [ A ] , index).peer
72+ def peer : ListCellRenderer [_ >: A ] = new ListCellRenderer [ A ] {
73+ def getListCellRendererComponent (list : JList [_ <: A ] , a : A , index : Int , isSelected : Boolean , focused : Boolean ) =
74+ componentFor(ListView .wrap[A ](list. asInstanceOf [ JList [ A ]] ), isSelected, focused, a, index).peer
7575 }
76- def componentFor (list : ListView [_], isSelected : Boolean , focused : Boolean , a : A , index : Int ): Component
76+ def componentFor (list : ListView [_ <: A ], isSelected : Boolean , focused : Boolean , a : A , index : Int ): Component
7777 }
7878
7979 /**
@@ -110,7 +110,7 @@ object ListView {
110110 /**
111111 * Configures the component before returning it.
112112 */
113- def componentFor (list : ListView [_], isSelected : Boolean , focused : Boolean , a : A , index : Int ): Component = {
113+ def componentFor (list : ListView [_ <: A ], isSelected : Boolean , focused : Boolean , a : A , index : Int ): Component = {
114114 preConfigure(list, isSelected, focused, a, index)
115115 configure(list, isSelected, focused, a, index)
116116 component
@@ -123,10 +123,10 @@ object ListView {
123123 * that renders the string returned from an item's <code>toString</code>.
124124 */
125125 implicit object GenericRenderer extends Renderer [Any ] {
126- override lazy val peer : ListCellRenderer = new DefaultListCellRenderer
127- def componentFor (list : ListView [_], isSelected : Boolean , focused : Boolean , a : Any , index : Int ): Component = {
128- val c = peer.getListCellRendererComponent(list.peer, a, index, isSelected, focused). asInstanceOf [ JComponent ]
129- Component .wrap(c)
126+ override lazy val peer : ListCellRenderer [ Any ] = ( new DefaultListCellRenderer ). asInstanceOf [ ListCellRenderer [ Any ]]
127+ def componentFor (list : ListView [_ <: Any ], isSelected : Boolean , focused : Boolean , a : Any , index : Int ): Component = {
128+ val c = peer.getListCellRendererComponent(list.peer, a, index, isSelected, focused)
129+ Component .wrap(c. asInstanceOf [ JComponent ] )
130130 }
131131 }
132132}
@@ -142,34 +142,34 @@ object ListView {
142142 */
143143class ListView [A ] extends Component {
144144 import ListView ._
145- override lazy val peer : JList = new JList with SuperMixin
145+ override lazy val peer : JList [ A ] = new JList [ A ] with SuperMixin
146146
147147 def this (items : Seq [A ]) = {
148148 this ()
149149 listData = items
150150 }
151151
152- protected class ModelWrapper (val items : Seq [A ]) extends AbstractListModel {
153- def getElementAt (n : Int ) = items(n). asInstanceOf [ AnyRef ]
152+ protected class ModelWrapper [ A ] (val items : Seq [A ]) extends AbstractListModel [ A ] {
153+ def getElementAt (n : Int ) = items(n)
154154 def getSize = items.size
155155 }
156156
157157 def listData : Seq [A ] = peer.getModel match {
158- case model : ModelWrapper => model.items
159- case model @ _ => new Seq [A ] { selfSeq =>
158+ case model : ModelWrapper [a] => model.items
159+ case model => new Seq [A ] { selfSeq =>
160160 def length = model.getSize
161161 def iterator = new Iterator [A ] {
162162 var idx = 0
163163 def next = { idx += 1 ; apply(idx- 1 ) }
164164 def hasNext = idx < selfSeq.length
165165 }
166- def apply (n : Int ) = model.getElementAt(n). asInstanceOf [ A ]
166+ def apply (n : Int ): A = model.getElementAt(n)
167167 }
168168 }
169169
170170 def listData_= (items : Seq [A ]) {
171- peer.setModel(new AbstractListModel {
172- def getElementAt (n : Int ) = items(n). asInstanceOf [ AnyRef ]
171+ peer.setModel(new AbstractListModel [ A ] {
172+ def getElementAt (n : Int ) = items(n)
173173 def getSize = items.size
174174 })
175175 }
@@ -216,7 +216,7 @@ class ListView[A] extends Component {
216216 def adjusting = peer.getSelectionModel.getValueIsAdjusting
217217 }
218218
219- def renderer : ListView .Renderer [A ] = ListView .Renderer .wrap[ A ] (peer.getCellRenderer)
219+ def renderer : ListView .Renderer [A ] = ListView .Renderer .wrap(peer.getCellRenderer)
220220 def renderer_= (r : ListView .Renderer [A ]) { peer.setCellRenderer(r.peer) }
221221
222222 def fixedCellWidth = peer.getFixedCellWidth
0 commit comments