【问题标题】:SpecifiedLayout in Prefuse does not workPrefuse 中的 SpecifiedLayout 不起作用
【发布时间】:2012-08-06 08:45:48
【问题描述】:

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

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

非常感谢任何帮助。

谢谢

【问题讨论】:

    标签: java prefuse


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      例如:

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

      这对你有用吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-19
        • 2012-02-11
        • 1970-01-01
        • 2011-11-06
        • 1970-01-01
        • 1970-01-01
        • 2012-05-31
        • 2019-06-13
        相关资源
        最近更新 更多