6

私はscala2.9.2とjava7を使用するプロジェクトに取り組んでいます。

私がやろうとしているのは、scalaListViewを使用してGUIを作成することです。

小さなコードスニペットは次のとおりです。

private val listView = new ListView[Document](someList)
.
.
.
for (selectedDocument <- listView.peer.getSelectedValuesList) {
    doSomething(selectedDocument)
}

これにより、次のコンパイルエラーが発生します。

error: something is wrong (wrong class file?): class JList with type parameters [E] gets applied to arguments [], phase = namer for (selectedDocument <- listView.peer.getSelectedValuesList) {

これは、ListViewでは、ピアがタイプパラメータなしで定義されているためだと思います。

override lazy val peer: JList = new JList with SuperMixin

したがって、問題は次のとおりです。Java7でscala-swingからListViewを使用することは不可能ですか?

4

3 に答える 3

3

ScalaのListViewを拡張し、「型付きピア」を追加することで、この問題を解決しました。

class ExtendedListView[A: ClassManifest] extends ListView[A] {
    lazy val typedPeer: JList[A] = peer.asInstanceOf[JList[A]]

    def selectionEmpty = typedPeer.isSelectionEmpty

    // Other functions omitted
}

よく働く!

于 2012-12-12T18:38:50.307 に答える
1

問題は、多くのスイングコンポーネントがJava 7で「一般化」されており、非互換性につながることです。Scalaライブラリは確かにJava<1.7のバージョンに向けてコンパイルされました。Java1.6に対してscalaコードをコンパイルすることをお勧めします。JavaコードをJava1.7でコンパイルして、scalaコードから使用することもできます。さらに、Java 1.6に対してコンパイルされたコードは、JVM1.7で実行できます。

更新:誰かが同じ問題に遭遇しました:http: //comments.gmane.org/gmane.comp.lang.scala.debate/9158

于 2012-11-06T17:14:53.500 に答える
0

私は、Java6とJava7+でコンパイルするときに両方を使用できるようにする小さなライブラリSwingPlusを作成しました。ListView問題は(他の人が指摘しているように)Java7でのSwingの生成です。

于 2015-11-16T00:13:21.893 に答える