0

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

前述したように、SpecifiedLayout の代わりに AxisLayout を使用すると、次のようになります。

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

ノードは正しい位置に設定されていますが、ドラッグやズームはできません。

助けていただければ幸いです。

どうも

4

2 に答える 2

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());
    }
});
于 2012-09-02T21:21:06.897 に答える
0

AxisLayout ではドラッグとズームができないと言うのはどういう意味ですか? DragControl と ZoomControl を追加する限り、ドラッグとズームは機能するはずです。

例えば:

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

それはあなたのために働きますか?

于 2012-08-12T07:49:49.683 に答える