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