类型不匹配组合框 Scala



我正在将旧的 scala swing 应用程序从 scala 2.7.7 升级到 2.9.3,将 jdk 1.6 升级到 jdk 1.7。

我能够使用旧设置运行应用程序,并且我几乎成功地在IntelliJ IDEA 12.1中升级了scala 2.9.3和jdk 1.7的应用程序。

但是我一直遇到组合框的问题。

麻烦制造者文件:

package gui
import gui.model.scenario._
import swing._
object ScenarioComboBox {
  private val model = new javax.swing.DefaultComboBoxModel
}
class ScenarioComboBox extends ComboBox[MutableScenario](Seq(new MutableScenario("", Map()))) {
  import ScenarioComboBox.model
  peer.setModel(model)
  private val dataModel = model.asInstanceOf[javax.swing.DefaultComboBoxModel]
  def contents = {
    var list: List[MutableScenario] = Nil
    val size = dataModel.getSize
    (0 to size - 1).foreach { index =>
      list = list ::: List(dataModel.getElementAt(index).asInstanceOf[MutableScenario])
    }
    list
  }
  def contents_=(v: List[MutableScenario]) {
    dataModel.removeAllElements
    v map dataModel.addElement
  }
  def selectedItem = dataModel.getSelectedItem.asInstanceOf[MutableScenario] match {
    case null => None
    case s    => Some(s)
  }
  def selectedItem_=(v: Option[MutableScenario]) {
    v match {
      case Some(s) => dataModel setSelectedItem s
      case None    => dataModel setSelectedItem null
    }
    selection.publish(swing.event.SelectionChanged(this))
  }
  listenTo(selection)
}

首先,在 jdk 1.7 中,IntelliJ 给出了以下警告:

Type mismatch, expected: ComboBoxModel[E], actual: DefaultComboBoxModel[Nothing]

在行:

peer.setModel(model)

当我按原样使用此文件编译源代码时,我收到以下错误,包括 jdk 1.6 和 1.7:

something is wrong (wrong class file?): class JComboBox with type parameters [E] gets applied to arguments [], phase = typer
  peer.setModel(model)
       ^

无论我尝试如何修复组合框,我似乎都遇到类型不匹配错误和/或无法使这段代码编译。(例如,我已经尝试了这个堆栈溢出问题中提出的想法 编辑组合框 Scala)

不是原始代码的作者,在过去的两周里,我刚刚学会了 scala 和 swing。

我觉得我已经用这个组合框尝试了一百万种东西,没有任何运气。

我终于从这个问题中得到了启发,解决了这个问题将 Scala 2.9.2 中的 ListView 与 Java 7 一起使用会导致编译错误

代码现在如下所示:

...
object ScenarioComboBox {
  private val model = new javax.swing.DefaultComboBoxModel[MutableScenario]
}
class ScenarioComboBox extends ComboBox[MutableScenario](Seq(new MutableScenario("", Map()))) {
  import ScenarioComboBox.model
  lazy val typedPeer: JComboBox[MutableScenario] = peer.asInstanceOf[JComboBox[MutableScenario]]
  typedPeer.setModel(model)
...

我现在能够使用 jdk 1.7 在 scala 2.9.3 中成功编译和运行整个项目

最新更新