当前位置: 首页 > 知识库问答 >
问题:

ScalaFX TableView中的可编辑布尔列

嵇弘新
2023-03-14

我是ScalaFx新手,想创建一个TableView,包含一个带< code >复选框的可编辑布尔列(以及带TextFields的可编辑String和Int列)。我假设我需要使用< code>CheckBoxTableCell。我用的是JDK 7u25,ScalaFX 1.0.0-M4/M5和Scala 2.10.2-final。(我不完全确定ScalaFX的版本,但它肯定至少是1.0.0-M5。无论如何,这是杰瑞克8月1日上传到https://oss.sonatype.org/index.html#nexus-search;的快照快~scalafx。Jarek只为Scala 2.9.x编译,但我已经下载了他的源代码并重新编译了它。)

我已经设法让它基于ScalaFX TableView中的整数列、http://foofighter2146.blogspot.com/2013/06/tutorial-scalafx-slick.html和calafx-demo: SimpleTableView中途工作。但是,我不能在TableView中使用CheckBox并使用它们的值。相反,我只能让它以这样一种方式工作,我需要输入“true”或“false”来编辑表中的值。

以下是我到目前为止所做的工作:

class Person(firstName_ : String, age_ : Int, cool_ : Boolean) {
  val name = new StringProperty(this, "Name", firstName_)
  val age = new IntegerProperty(this, "Age", age_)
  val cool = new ObjectProperty(this, "Cool", cool)
}

object SimpleEditableTableView extends JFXApp {
  val characters = ObservableBuffer[Person](
    new Person("Peggy", 45, false),
    new Person("Rocky", 43, true)
  )

  stage = new PrimaryStage {
    title = "Simple Ediatble Table View"
    scene = new Scene {
      content = new TableView[Person](characters) {
        editable = true
        columns ++= List(
          new TableColumn[Person, String] {
            text = "Name"
            cellValueFactory = {_.value.name}
            cellFactory = _ => new TextFieldTableCell[Person, String] (new DefaultStringConverter())
            onEditCommit = (evt: CellEditEvent[Person, String]) => {
              val person = evt.rowValue
              val newName = evt.newValue
              println("Here we'll typically save the data. New name = "+newName)
            }
            editable = true
            prefWidth = 180
          },
          new TableColumn[Person, Int] {
            text = "Name"
            cellValueFactory = {_.value.age}
            cellFactory = _ => new TextFieldTableCell[Person, Int] (new IntStringConverter())
            onEditCommit = (evt: CellEditEvent[Person, Int]) => {
              val person = evt.rowValue
              val newAge = evt.newAge
              println("Here we'll typically save the data. New age = "+newAge)
            }
            editable = true
            prefWidth = 180
          },
          new TableColumn[Person, Boolean] {
            text = "Cool"
            cellValueFactory = {_.value.cool}
            cellFactory = _ => new TextFieldTableCell[Person, Boolean] (new BooleanStringConverter())
            onEditCommit = (evt: CellEditEvent[Person, Boolean]) => {
              val person = evt.rowValue
              val newCool = evt.newCool
              println("Here we'll typically save the data. New cool = "+newCool)
            }
            editable = true
            prefWidth = 180
          }
        )
      }
    }
  }
}

对于“酷”表列,我想替换

cellFactory = _ => new TextFieldTableCell[Person, Boolean] (new BooleanStringConverter())

随着

val selectedProperty: Int => ObservableValue[Boolean, java.lang.Boolean] = {rowNum: Int => model.characters(rowNum).cool}
cellFactory = column => CheckBoxTableCell.forTableColumn[Person, Boolean](selectedProperty)

为了在TableView中获得漂亮的复选框(目前,我得到了文本字段,我必须在其中键入“true”或“false”)。然而,这给了我一个(明显的)错误:

type mismatch; found : scalafx.beans.property.ObjectProperty[scala.Boolean] required: scalafx.beans.value.ObservableValue[scala.Boolean,java.lang.Boolean]

如果我改变了

val selectedProperty: Int => ObservableValue[Boolean, java.lang.Boolean] = {rowNum: Int => model.characters(rowNum).cool}

to val selectedProperty = {rowNum: Int =

我收到一条错误消息,基本上归结为<code>CheckBoxTableCell。forTableColumn[Person,Boolean](selectedProperty)要求selectedProperty,类型为Int=


共有1个答案

柳经纶
2023-03-14

基本上你应该使用BooleanProperty,你可以找到详细信息,包括一个完整的例子,在同一个问题的答案发布在calafx-user讨论组https://groups.google.com/d/msg/scalafx-users/oedbP9TY5YE/csNi1qhsNuQJ

 类似资料:
  • 我想在页面上显示一个布尔值(实际上是表格中的单元格),并且它必须是可编辑的。此外,它不是一个复选框,但我拼写出“false”和“true”。我们使用Bootstrap3和最新的淘汰赛。我决定使用x-editable Bootstrap 3构建。我还使用了击出自定义绑定:https://github.com/brianchance/knockout-x-editable. 我想,要实现这一点,我需要

  • 我注意到java有一个问题。它不能解析空值的布尔类。我知道它有静态方法,但它的签名声明它只接受,而不接受。 换句话说,它有以下签名: 但不是: 检查布尔值而不陷入NullPointerException的最佳方法是什么?

  • 问题内容: 我想使用 AND OR 获取所有文档。 我写错了这个逻辑吗? 为什么我的查询返回0个结果? 注意 :我可以接受查询或过滤器来解决此问题。 这些是一些示例文档: 询问 问题答案: 您无法获得结果的主要原因是因为您试图对进行过滤,这是一个已分析的字段。如果要对该字段进行匹配,则需要更新类型映射以将该字段设置为。请参见以下示例映射: 从此处开始阅读有关映射的信息:http : //www.e

  • 我正在使用熊猫中的布尔索引。 问题是为什么声明: 很好,但是 错误退出? 例子:

  • 问题内容: 我正在Pandas中使用布尔值索引。问题是为什么要声明: 工作正常而 错误退出? 例: 问题答案: 当你说 你暗中要求Python进行转换并转换为布尔值。 NumPy数组(长度大于1)和对象(例如)没有布尔值-换句话说,它们引发 当用作布尔值时。那是因为不清楚何时应该为True或False。如果某些用户的长度非零,则可能会认为它们为True,例如Python列表。其他人可能只希望其所有

  • 我很难弄清楚为什么下面的代码不能像预期的那样工作: 不管我做什么,我总是变得“真实”。我理解这段代码的逻辑,甚至当从类运行源文件时,我也不会得到预期的输出。 当输入为0、null、undefined、空字符串或nan时,我应该得到“falsy”。 我做错了什么?谢谢.