我正在将旧的 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 的应用程序。
但是我一直遇到 ComboBox 的问题。
麻烦制造者文件:
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)
^
无论我尝试修复组合框,我似乎都会遇到类型不匹配错误和/或无法编译这段代码。(例如,我已经尝试过这个 stackoverflow 问题Editing Combobox Scala中提出的想法)
我不是原始代码的作者,最近两周我才刚刚学习了 scala 和 swing。
我觉得我已经用这个组合框尝试了一百万种东西,但没有任何运气..