我想使用CSS更改自定义TreeCell的背景颜色,但在树状单元格上设置样式属性不起作用。我可以使用交替的黄色和灰色单元格对树进行样式设置,其CSS文件如下所示:
.tree-cell:disabled {
-fx-padding: 3 3 3 3;
-fx-background-color: white;
}
.tree-cell:selected {
-fx-background-color: blue;
}
.tree-cell:even {
-fx-background-color: yellow;
}
.tree-cell:odd {
-fx-background-color: grey;
}
.tree-cell:drag-over {
-fx-background-color: plum;
}
并使用如下所示的事件处理程序更改文本的填充样式:
onDragEntered = (event: DragEvent) => {
val db = event.getDragboard
if (db.hasContent(customFormat)) {
textFill = Color.DEEPSKYBLUE
style() = "tree-cell:drag-over"
}
event.consume()
}
但树形细胞的样式不会改变。
答案 0 :(得分:1)
我最终找到了自己问题的答案。 CSS文件现在看起来像这样:
.tree-cell:disabled {
-fx-padding: 3 3 3 3;
-fx-background-color: white;
}
.tree-cell:selected {
-fx-background-color: blue;
}
.tree-cell:filled:even {
-fx-background-color: lightyellow;
}
.tree-cell:filled:odd {
-fx-background-color: lightsteelblue;
}
.tree-cell.drag-over:filled {
-fx-background-color: plum;
}
我现在在填充的细胞上拖动时会变成梅花色。空细胞保持白色。 为了到达这里,我需要理解“CSS特性”的规则,尽管最终可以简化完成的CSS文件,使每个案例与一个选择器完全匹配。
ScalaFX代码现在看起来像这样:
import scala.collection.JavaConversions._
// Copy the list, so that it isn't modified in place.
var oldStyleClass: util.Collection[String] = styleClass.toList
onDragEntered = (event: DragEvent) => {
val db = event.getDragboard
if (db.hasContent(customFormat)) {
textFill = Color.DEEPSKYBLUE
// Remember the original style by taking a copy.
oldStyleClass = styleClass.toList
// Restyle filled cells with .tree-cell.dragover:filled
// for the duration of the drag
styleClass.add("drag-over")
}
event.consume()
}
onDragExited = (event: DragEvent) => {
val db = event.getDragboard
if (db.hasContent(customFormat)) {
textFill = Color.BLACK
}
// Restore the original style.
styleClass.setAll(oldStyleClass)
event.consume()
}
在某个地方,我丢失了动画以丢失失败。否则我很高兴(但在ScalaFX-land中有些孤独。)