我根据Change expand and collapse image TreeView JavaFX 2.2为公开节点的两个状态定义了图像(折叠/展开)
但我想为文件夹节点提供第三个图像,它仍然没有任何子节点 . 不应该扩展/折叠这样的节点,但它也应该显示一个图像(即扩展节点的minus.png,折叠节点的plus.png和没有子节点的文件夹节点的空矩形) .
可能吗?
我根据Change expand and collapse image TreeView JavaFX 2.2为公开节点的两个状态定义了图像(折叠/展开)
但我想为文件夹节点提供第三个图像,它仍然没有任何子节点 . 不应该扩展/折叠这样的节点,但它也应该显示一个图像(即扩展节点的minus.png,折叠节点的plus.png和没有子节点的文件夹节点的空矩形) .
可能吗?
2 回答
没有子节点意味着树项是叶节点,类型为“文件夹” . 您可以利用树项的图形属性来显示“空矩形”图像:
不要忘记为添加到treeView的每个treeitem创建新的imageview,并且需要该图像 .
我为无子女案例定义了一个css结构:
接下来我扩展了TreeItem类:
因此,对于无子文件夹,对于isLeaf(),TreeItem总是返回false . com.sun.javafx.scene.control.skin.TreeCellSkin.class将使用isLeaf()方法来决定是否应删除公开节点 . 重建节点可能很棘手,因此我阻止删除节点 .
这导致正常的公开节点,现在我必须改变节点的图像 .
覆盖TreeItem类的isExanded()方法会很好 . 然后我只需要一个CSS结构(该方法对于无子文件夹总是返回false) . 但isExpanded()是最终的 . 所以我不能阻止用户进行非/扩展切换,我必须定义两个CSS结构 .
接下来,我构建了一个TreeCellFactory,它生成我自己的BrowserTreeCell类 . 它切换PseudoClass状态,我们在上面的CSS中使用它来激活披露节点的一些新图像 .
结果,在两种情况下(非扩展),我得到一个带有“childless.png”的披露节点 .