小编bra*_*n99的帖子

如何设计TreeCell儿童的风格?

首先,一些上下文:我的JavaFX应用程序中有一个TreeView,具有自定义的TreeCell实现.此实现添加了一个HBox以在右侧显示标签(使用LabeledText)和一个(或多个)图标/状态指示器.标签和图标也会附加工具提示.在使用Scenic View进行检查时,结果如下:

我的TreeView风景

正如您在上图中所看到的,单元格包含带有标签(LabeledText)的HBox,间距区域,在此示例中为一个图标(使用字体,因此为Glyph + LabeledText).可以使用字体或某些点可能添加更多图标.

根据所表示项目的状态,我想以不同的方式设置标签样式(例如,不同的文字颜色,斜体,......).生成的TreeView目前看起来像这样:

TreeView在应用程序中显示

实际问题:我尝试了一些我的方法的变体,但逻辑解决方案虽然看起来应该没有正常工作.我错过了什么吗?我是否发现了JavaFX CSS处理中的错误?

我有一个当前有效的解决方法(但如果我将某些功能添加到我的TreeView中可能会停止这样做)所以我仍然想知道为什么这不能按预期工作.

基本方法

根据显示的项目及其状态,将相关的CSS类应用于TreeCell.使用CSS选择器设置内部标签的样式.例如:

.mystatus > HBox > .text {
    -fx-font-style: italic;
}

/* the following variants give mostly the same result */
.mystatus > HBox > LabeledText {
    -fx-font-style: italic;
}
.mystatus .text { /* only difference: this messes up my icons */
    -fx-font-style: italic;
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,一旦用户开始在UI中操作TreeView,TreeCell的子项的CSS选择似乎无法可靠地工作.CSS应用于与给定CSS规则不匹配的节点.例如,在展开/折叠某些项目之后, CSS选择器不匹配的标签无论如何都会显示斜体.

所以,如果你看一下上面的图片,并认为这是我的项目的正确显示.折叠/重新打开项目1节点可能会导致,即使没有将此类CSS添加到该节点,项目3突然变为斜体.

我使用Scenic View验证了应用的类,以确保我正确地设置/清除类:CustomTreeCellImpl中有LabeledText节点,而没有mystatus仍然得到斜体的类.

备选方案1:使用伪类而不是常规类

与上述基本方法相同的问题

CSS示例:

*.tree-cell:mystatus > HBox > .text {
    -fx-font-style: …
Run Code Online (Sandbox Code Playgroud)

css java treeview javafx javafx-8

5
推荐指数
1
解决办法
664
查看次数

标签 统计

css ×1

java ×1

javafx ×1

javafx-8 ×1

treeview ×1