gpt4 book ai didi

jung - 如何通过更改代码中的位置而不是鼠标来移动 JUNG 节点(顶点)?

转载 作者:行者123 更新时间:2023-12-01 05:07:17 25 4
gpt4 key购买 nike

我正在实现一个用于创建图形节点并使用 连接它们的接口(interface)郑 .

我想使用 edge 创建一些可以从一个现有节点移动到另一个节点的节点。两个节点之间作为它们的路径 (它将用于显示一些 Data Packets 在类似于 Hosts 的节点之间传输)。

网上有一些关于如何制作的资料。郑节点(顶点)可通过鼠标移动,但没有关于将它们移动 modifying values in the code 的信息.

即使有移动节点的方法,使用节点之间的边作为中的移动路径,在节点之间移动节点也是可能且有效的。郑图书馆?

任何建议,将不胜感激。

最佳答案

您可以使用 setLocation 强制移动顶点布局方法。我已经建立了与您的要求非常相似的东西。它产生一个从顶点 A 直线移动到顶点 B 的顶点。如果你的边缘是直的,那么它可能会起作用:

import java.awt.geom.Point2D;
import edu.uci.ics.jung.algorithms.layout.AbstractLayout;
import edu.uci.ics.jung.algorithms.util.IterativeProcess;
import edu.uci.ics.jung.visualization.VisualizationViewer;

public class VertexCollider extends IterativeProcess {

private static final String COLLIDER = "Collider";
private AbstractLayout<String, Number> layout;
private VisualizationViewer<String, Number> vv;
private Point2D startLocation;
private Point2D endLocation;
private Double moveX;
private Double moveY;

public VertexCollider(AbstractLayout<String, Number> layout, VisualizationViewer<String, Number> vv, String vertexA, String vertexB) {
this.layout = layout;
this.vv = vv;
startLocation = layout.transform(vertexA);
endLocation = layout.transform(vertexB);
}

public void initialize() {
setPrecision(Double.MAX_VALUE);
layout.getGraph().addVertex(COLLIDER);
layout.setLocation(COLLIDER, startLocation);
moveX = (endLocation.getX() - startLocation.getX()) / getMaximumIterations();
moveY = (endLocation.getY() - startLocation.getY()) / getMaximumIterations();
}

@Override
public void step() {
layout.setLocation(COLLIDER, layout.getX(COLLIDER) + moveX, layout.getY(COLLIDER) + moveY);
vv.repaint();
setPrecision(Math.max(Math.abs(endLocation.getX() - layout.transform(COLLIDER).getX()),
Math.abs(endLocation.getY() - layout.transform(COLLIDER).getY())));
if (hasConverged()){
layout.getGraph().removeVertex(COLLIDER);
}
}
}

例如,您可以使用以下代码实例化它:
    VertexCollider vtxCol = new VertexCollider(layout, vv, "nameOfVertexA", "nameOfVertexB");
vtxCol.setMaximumIterations(100);
vtxCol.setDesiredPrecision(1);
vtxCol.initialize();
Animator animator = new Animator(vtxCol);
animator.start();

画直边:

Code Example

关于jung - 如何通过更改代码中的位置而不是鼠标来移动 JUNG 节点(顶点)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27590406/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com