0

私は、古い 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)
       ^

タイプの不一致エラーが発生したり、コンボボックスを修正しようとしても、このコードをコンパイルできないようです。(たとえば、このスタックオーバーフローの質問Editing Combobox Scalaで提示されたアイデアを試しました)

私は元のコードの作成者ではなく、この 2 週間で scala と swing を学んだばかりです。

このコンボボックスで何百万ものことを試したような気がします..

4

1 に答える 1