ScalaFX TableView - 简单的示例编译器错误

时间:2018-04-15 19:31:28

标签: scala scalafx

我只是想熟悉ScalaFX,而我的Scala知识也仍然处于胚胎阶段。在下面这个简单的问题中,你能帮我解决一下吗?

import scalafx.application.JFXApp
import scalafx.application.JFXApp.PrimaryStage
import scalafx.collections.ObservableBuffer
import scalafx.scene.Scene
import scalafx.scene.control.TableColumn._
import scalafx.scene.control.{TableCell, TableColumn, TableView}

object Gui extends JFXApp {

case class listInfo(text: String, subtexts: List[String], thumbnail: String, attributeField: Int)

  val demo = ObservableBuffer[listInfo](
    new listInfo("dewdfasc", subtexts = List("first", "second"), "tdsam", 1),
    new listInfo("hgfhfghn", subtexts = List("first", "second"), "tdsacdsm", 2)
  )

  stage = new PrimaryStage {
    title = "ScalaFX Hello World"
    scene = new Scene {
      root = TableView[listInfo](demo) {
        columns ++= List(
          new TableColumn[listInfo, String] {
            text = "band"
            cellValueFactory = {_.value.text}
            prefWidth = 100
          },
          new TableColumn[listInfo, String] {
            text = "thumbnail"
            cellValueFactory = {_.value.thumbnail}
            prefWidth = 100
          }
        )
      }
    }
  }

}

有以下编译器错误:

Error:(20, 23) object TableView does not take type parameters.
      root = TableView[listInfo](demo) {
Error:(21, 9) not found: value columns
        columns ++= List(
Error:(24, 41) type mismatch;
 found   : String
 required: scalafx.beans.value.ObservableValue[String,String]
            cellValueFactory = {_.value.text}
Error:(29, 41) type mismatch;
 found   : String
 required: scalafx.beans.value.ObservableValue[String,String]
            cellValueFactory = {_.value.thumbnail}

我的环境:

java 1.8

scala 2.12

scalafx 2.11-8.0.144-R12

我应该纠正什么,以便编译?

提前致谢!

1 个答案:

答案 0 :(得分:0)

import scalafx.application.JFXApp
import scalafx.beans.property.StringProperty
import scalafx.collections.ObservableBuffer
import scalafx.scene.Scene
import scalafx.scene.control.TableColumn._
import scalafx.scene.control.{ TableColumn, TableView }

object Gui extends JFXApp {
    case class ListInfo(_text: String, _subtexts: List[String], _thumbnail: String, _attributeField: Int) {
        val text = new StringProperty(this, "text", _text)
        val thumbnail = new StringProperty(this, "thumbnail", _thumbnail)
    }

    val demo = ObservableBuffer[ListInfo](
        ListInfo("dewdfasc", List("first", "second"), "tdsam", 1),
        ListInfo("hgfhfghn", List("first", "second"), "tdsacdsm", 2)
    )

    stage = new JFXApp.PrimaryStage {
        title.value = "ScalaFX Hello World"
        scene = new Scene {
            root = new TableView[ListInfo](demo) {
                columns ++= List(
                    new TableColumn[ListInfo, String] {
                        text = "band"
                         cellValueFactory = _.value.text
                         prefWidth = 100
                    },
                    new TableColumn[ListInfo, String] {
                        text = "thumbnail"
                        cellValueFactory = _.value.thumbnail
                        prefWidth = 100
                    }
                )
            }
        }
    }
}
  • 使用大写类型(例如ListInfo)
  • 创建案例类的实例
  • 时,新键盘是多余的
  • cellValueFactory期待scalafx.beans.value.ObservableValue [String,String]而不是string(参见案例类ListInfo val)