如何在ScalaFX中使用CSS设置自定义TreeCell的样式?

时间:2013-08-13 09:45:26

标签: css scalafx

我想使用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()
  }

但树形细胞的样式不会改变。

1 个答案:

答案 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中有些孤独。)