Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swing 类型不匹配组合框scala_Swing_Scala - Fatal编程技术网

Swing 类型不匹配组合框scala

Swing 类型不匹配组合框scala,swing,scala,Swing,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

我正在将一个旧的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和swing


我觉得我已经用这个组合框尝试了一百万件事情,但没有任何运气。

我终于在这个问题的启发下解决了这个问题

代码现在如下所示:

...
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)
...
现在,我能够使用JDK1.7在scala 2.9.3中成功编译并运行整个项目,也许情况仍然如此。