簡體   English   中英

類型不匹配的組合框標量

[英]type mismatch combobox 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升級該應用程序幾乎成功。

但是我仍然遇到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)
}

首先,IntelliJ使用jdk 1.7發出以下警告:

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。

我覺得我已經用這個組合框嘗試了一百萬種東西,但是沒有任何運氣。

我終於從這個問題的靈感中解決了這個問題, 將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中成功編譯並運行整個項目

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM