Prefuse中的SpecifiedLayout不起作用

时间:2012-08-06 08:45:48

标签: java prefuse

我在使用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));

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

我真的很感激任何帮助。

THX

2 个答案:

答案 0 :(得分:2)

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

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());
    }
});

答案 1 :(得分:0)

当您说AxisLayout无法进行拖动和缩放时,您的意思是什么?只要添加DragControl和ZoomControl,拖动和缩放就可以工作。

例如:

display.addControlListener(new DragControl());
display.addControlListener(new ZoomControl());

这对你有用吗?