【问题标题】:Removing JavaFX TreeCell formating added with PseudoClass删除使用伪类添加的 JavaFX TreeCell 格式
【发布时间】:2017-07-17 08:28:22
【问题描述】:

我正在使用 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 的特定树单元中“持续存在”。也就是说,如果我折叠或展开其他树枝,突出显示将保持“原位”突出显示不符合条件的其他单元格。我以为setGraphic(null) 会删除格式。

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

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

但不知何故,我觉得我应该只从已格式化的格式中删除格式或使用更“全局”的清除。

【问题讨论】:

  • 我不太明白为什么您会发现缺少自己的解决方案-如果您在TreeCell 上设置了伪类,则必须在它不再有效时将其清除。将图形设置为null 不会改变TreeCell 本身的样式。我猜您可能会在用作图形内容的节点上设置样式,但在某些情况下这可能是不可能的,具体取决于您的实际样式。据我所知,如果伪类不处于活动状态,则删除它并没有什么问题——这就是使用伪类而不是样式类的意义所在。
  • 我想我只是期待一种更“优雅”的方式。我想很少有资源可以真正解释 JavaFX 在幕后工作的方式,因此很难理解一个人的解决方案是否符合框架理念。
  • 我同意文档有些缺乏,而且框架理念有时似乎不一致。也许更优雅的方法是使用内置的emptyfilled 伪类,因此您的CSS 规则可以是:filled:ambiguous-feature,这意味着它永远不会应用于空单元格。见JavaFX CSS Reference
  • 太棒了!如果您将此作为答案发布,我将很乐意接受它作为答案。

标签: css treeview javafx-8 pseudo-class


【解决方案1】:

正如 cmets 中所述,答案中提出的解决方案本身是完全有效的,但是更简洁的处理方法可能是使用内置的 filled 伪类 Cell自动到任何非空单元格:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-01
    • 1970-01-01
    相关资源
    最近更新 更多