我找到了一种不使用谓词的方法,但是通过创建我自己的 ColorAction 子类:
class ConnectedEdgeColorAction extends ColorAction {
final int outgoing = ColorLib.rgb(255, 100, 100);
final int incoming = ColorLib.rgb(100, 255, 100);
final int none = ColorLib.gray(100);
public ConnectedEdgeColorAction(String group, String field) {
super(group, field);
}
@Override
public int getColor(VisualItem item) {
if (item instanceof EdgeItem) {
if (((EdgeItem) item).getSourceItem().isHover()) {
return outgoing;
} else if (((EdgeItem) item).getTargetItem().isHover()) {
return incoming;
}
}
return none;
}
}
然后,我将其用作边缘的主要颜色动作:
ColorAction nEdges = new ConnectedEdgeColorAction(EDGES, VisualItem.STROKECOLOR);
我不知道这是否是“首选”方式,但它对我来说足够好。