我在Prefuse中使用SpecifiedLayout时遇到问题。我想在已经预定义的位置设置一些节点。我尝试使用AxisLayout。节点设置在正确的位置,但是我不能真正使用DragControl或ZoomControl的选项。
因此,我尝试使用SpecifiedLayout。这里的问题是所有节点都设置在同一位置,而不是我一开始指定的位置。
希望有人可以帮助我解决这个问题。

这是代码:

private static Visualization vis;
graph = new Graph();

graph.addColumn("positionx", Integer.class);
graph.addColumn("positiony", Integer.class);


然后,我将预定义的位置添加到“ positionx”和“ positiony”。然后:

ActionList layout = new ActionList(ActionList.INFINITY);

SpecifiedLayout l = new SpecifiedLayout("graph.nodes","positionx","positiony");
layout.add(l);
layout.add(new RepaintAction());
vis.putAction("layout", layout);


如我所说,如果我使用AxisLayout而不是SpecifiedLayout:

layout.add(new AxisLayout("graph.nodes","positionx",Constants.X_AXIS));
layout.add(new AxisLayout("graph.nodes","positiony",Constants.Y_AXIS));


节点设置在正确的位置,但是无法拖动和缩放。

我真的很感谢您的帮助。

谢谢

最佳答案

运行后,我必须使其工作(定位节点):

vis.run("layout");


在向图插入新节点之后。

要更新字段,必须在发布项目后设置字段。

this.addControlListener(new DragControl() {
    @Override
    public void itemReleased(VisualItem item, MouseEvent e) {
        super.itemReleased(item, e);

        item.set("positionX", item.getX());
        item.set("positionY", item.getY());
    }
});

08-16 05:09