删除使用伪类添加的 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 */
}
我正在使用 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 */
}