Prefuse。将鼠标悬停在节点上时,如何更改连接边的可视化?

时间:2014-10-20 13:37:10

标签: java prefuse

我使用这个典型的片段(来自prefuse示例)来改变鼠标悬停在其上的一个节点的颜色:

ColorAction nFill = new ColorAction(NODES, VisualItem.FILLCOLOR);
nFill.setDefaultColor(ColorLib.gray(255));
nFill.add("_hover", ColorLib.gray(200));

我想在&中设置边缘的颜色。从这个节点到另一个颜色,最好是ins的颜色不同于out,但我找不到正确的谓词。

我使用有向图,以防万一。

有没有办法迭代谓词API中当前节点/边的子节点/父节点?你有解决我实际问题的方法吗?

2 个答案:

答案 0 :(得分:2)

我找到了一种没有谓词的方法,但是通过创建我自己的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);

我不知道这是否是“首选”方式,但对我来说效果还不错。

答案 1 :(得分:0)

另一种解决方案可以沿着

  • 创建Action的子类
  • 在具有谓词_hover
  • 的节点上调用此Action Action子类中的
  • 转到传入和传出边缘并设置其颜色