在试图覆盖scala中的getListCellRenderComponent方法时,对象创建不可能的错误



我正在尝试覆盖Scala类中DefaultListCellRenderer类中的GetListCellRendererComponent方法(我正在使用Intellij Scala Plugin)。这是以下代码:

val cellRenderer = new javax.swing.DefaultListCellRenderer {
  override def getListCellRendererComponent(list: JList[_], value: AnyRef, index: Int, isSelected: Boolean, cellHasFocus: Boolean): Component = {
    val retval: JLabel = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus).asInstanceOf[JLabel]
    retval.setForeground(getVariableColor(value.toString))
    return retval.asInstanceOf[JLabel]
  }
}
varsCombo.setRenderer(cellRenderer)

我正在遇到这个错误:不可能创建对象,因为特质中的方法getListCellRendererCompongent

类型的listCellrenderer(x $ 1:javax.swing.jlist [_<:object],x $ 2: 对象,x $ 3:int,x $ 4:布尔值,x $ 5:boolean)java.awt.component不是 定义 Val CellRenderer = new Javax.swing.defaultListCellRenderer {

我很困惑为什么..我刚刚开始学习Scala语言,无法想到任何原因不起作用。

任何帮助,感谢!

编辑:

我找到了一个页面,其中有人似乎有同样的问题:http://www.scala-lang.org/old/node/10687

"终于我能够通过简单的解决方法解决问题。这是扩展DefaultListCellRenderer的解决方案(任务是我的域类):

object TaskCellRenderer extends ListCellRenderer[Task] {
 val peerRenderer: ListCellRenderer[Task] = (new
 DefaultListCellRenderer).asInstanceOf[ListCellRenderer[Task]]
 override def getListCellRendererComponent (
 list: JList[_ <: Task], task: Task, index: Int,
 isSelected: Boolean, cellHasFocus: Boolean): Component = {
val component = peerRenderer.getListCellRendererComponent(
 list, task, index, isSelected, cellHasFocus)
 .asInstanceOf[JComponent]
 // ... do some component customization here ...
component
}
}

而不是直接扩展DefaultListCellRenderer我实现ListCellRenderer接口。"


问题是我不知道为什么要解决这个问题?以及如何将解决方案应用于我的问题。

如果有人可以解释解决方案为什么有效的原因,或者如何将其应用于我的问题。(抱歉,请记住我是Scala的新手)

您正在覆盖Java通用方法:

public Component getListCellRendererComponent(
        JList<?> list,
        Object value,
        int index,
        boolean isSelected,
        boolean cellHasFocus)

这样做是有限制的。有关更多详细信息,请参阅此信息:Scala:覆盖通用Java方法II。

最新更新