我正在做一个使用scala 2.9.2和java 7的项目。
我想要做的是使用scala ListView创建一个图形用户界面。
下面是一小段代码:
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中,peer的定义没有类型参数:
override lazy val peer: JList = new JList with SuperMixin所以问题是:在Java7中使用scala-swing中的ListView是不可能的吗?
发布于 2012-12-13 02:38:50
通过扩展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-11-07 01:14:54
问题是许多swing组件在Java7中被“泛化”,导致不兼容。scala库肯定是针对Java小于1.7的版本编译的。我建议用Java1.6编译你的scala代码。您仍然可以在Java 1.7中编译Java代码,并在scala代码中使用它,此外,针对Java 1.6编译的代码可以在JVM 1.7上运行。
更新:有人遇到了同样的问题:http://comments.gmane.org/gmane.comp.lang.scala.debate/9158
发布于 2015-11-16 08:13:22
我已经写了一个小型库SwingPlus,它使得在Java6和Java 7+上编译时都可以使用ListView。问题(正如其他人所指出的)是Swing在Java7中的泛化。
https://stackoverflow.com/questions/13253679
复制相似问题