删除使用伪类添加的 JavaFX TreeCell 格式

Removing JavaFX TreeCell formating added with PseudoClass

我正在使用 PseudoClass 根据树单元格中数据给出的条件更改 JavaFx TreeCell 的格式。以下代码有效:

public class EmfTreeCellImpl extends TreeCell<EmfTreeNode> {

    PseudoClass AMBIGUOUS_FEATURE = PseudoClass.getPseudoClass("ambiguous-feature");

    public EmfTreeCellImpl() {
    }

    @Override
    protected void updateItem(EmfTreeNode item, boolean empty) {
        super.updateItem(item, empty);
        if (empty || item == null) {
            setText(null);
            setGraphic(null);
            return;
        }
        setText(item.getLabel());
        setEditable(false);
        if (item instanceof EmfTreeNode.SingleAttributeNode) {
            EmfTreeNode.SingleAttributeNode san = (EmfTreeNode.SingleAttributeNode) item;
            //pseudoClassStateChanged(AMBIGUOUS_FEATURE, san.isAmbiguous());
            pseudoClassStateChanged(AMBIGUOUS_FEATURE, san.isAmbiguous());
        }
    }
}

单元格正确突出显示。问题是在 GUI 的特定树单元格中突出显示 "persisted"。也就是说,如果我折叠或展开其他树枝,突出显示会保持 "in place" 突出显示其他不符合条件的单元格。我以为 setGraphic(null) 会删除格式。

为了解决这个问题,我在 updateItem 中添加了一行以清除格式:

if (empty || item == null) {
    setText(null);
    setGraphic(null);
    pseudoClassStateChanged(AMBIGUOUS_FEATURE, false);
    return;
}

但不知何故,我觉得我应该只从已格式化的格式中删除格式或使用更 "global" 清晰的格式。

如评论中所述,答案中提出的解决方案本身是完全有效的,但是更简洁的处理方式可能是使用内置的 filled 伪 class of Cell 自动应用于任何非空单元格:

:filled:ambiguous-feature { 
    /* css-styling of non-empty ambiguous cells */ 
}