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;
}
答案 0 :(得分:1)
JavaFX在渲染时重用单元格。在动态更新TableView
内容时尤其明显。您的cellFactory
必须在收到空白或null
项目时清除单元格内容:text
和graphic
需要设置为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 {
...
}
}
}
}