tableview的某些单元格中的错误数据

时间:2016-11-24 18:25:38

标签: scala scalafx

scala和scalafx的新功能,并且在简单的股票报价应用程序中遇到了tableview的问题[注意:之前没有javafx经验,除非它与Android的方式相似]

问题:(见图片)更改列中显示的错误数据应该没有。

要创建:多个方案,此处显示的是新的自动收报机符号的输入。似乎无法预测有多少单元出错。改变窗口大小(比如说更短,然后更高)通常会产生更多不良细胞。如果没有对windowsize和/或符号列表进行任何更改,则永远不会发生。

'自动收报机的代码'并且'改变'下面的列,虽然我怀疑它是如何实现更改列来进行绿色/红色文本着色。

(注意:数据会定期在一个批次中更新,这就是新符号不会立即显示报价数据的原因)

#imge .text {
                            position:relative;
                            opacity:1;
                            background: rgba(0,0,0,0.5);
                            color: white;
                            bottom:80px;
                            left:0px;
                            visibility:hidden;

                            }

                            #imge:hover .text {

                            font-family: 'Dancing Script', cursive;
                            color: #ffffff;
                            font-size: 2em;
                            position: absolute;
                            top: 50%;
                            left: 50%;  
                            transform: translate(-50%, -50%);
                            visibility: visible; 

                            }

enter image description here

1 个答案:

答案 0 :(得分:1)

JavaFX在渲染时重用单元格。在动态更新TableView内容时尤其明显。您的cellFactory必须在收到空白或null项目时清除单元格内容:textgraphic需要设置为null。仅检查newChange == null

就足够了
cellFactory = { _ =>
  new TableCell[Quote, String] {
    item.onChange { (_, _, newChange) =>
      if (newChange == null) {
        text = null
        graphic = null
      else {
        if (newChange.toString.contains("+")) textFill = Color.Green
        else textFill = Color.Red
        text = newChange
      }
    }
  }
}

通过实现传递cellFactory标志的javafx.scene.control.TableCell和覆盖方法updateItem,您必须实现empty JavaFX方式,这是不可靠的。 / p>

cellFactory = {_ =>
  new javafx.scene.control.TableCell[Quote, String] {
    override def updateItem(item: String, empty: Boolean): Unit = {
      super.updateItem(item, empty) 
      if (item == null || empty) {
         text = null
         graphic = null
      }
      else {
        ...
      }
    }
  }
}