试图覆盖阶getListCellRenderComponent方法时,对象的创建是不可能的错误(Ob

2019-10-19 05:38发布

我试图覆盖在DefaultListCellRenderer类的getListCellRendererComponent方法在斯卡拉类(我用的IntelliJ斯卡拉插件)。 这里的代码如下:

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)

在特质对象的创建是不可能的,因为方法getListCellRendererComponent:我getthing这个错误

类型的ListCellRenderer(X $ 1:javax.swing.JList中[_ <:对象],X $ 2:对象,X $ 3:中等,X $ 4:布尔,X $ 5:布尔值)没有定义java.awt.Component中VAL cellRenderer的=新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接口。 “


问题是我不知道为什么这解决了问题? 而如何解决应用到我的问题..因为我们试图实现略有不同的东西。

如果任何人都可以解释为什么解决方案的工作,或如何将其应用到我的问题..将不胜感激! (抱歉,请记住我是很新的阶)

Answer 1:

您正在覆盖Java的泛型方法:

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

有做这个限制。 请参阅此了解更多详情: 斯卡拉:重写通用的Java方法II 。



文章来源: Object creation impossible error when trying to override getListCellRenderComponent method in scala