我在jgraph的帮助下为可视化创建了一个应用程序。我有几个问题。
1:我需要根据Vertex对象的属性更改“顶点”的名称。当我使用默认设置运行应用程序时,顶点的名称将打印为Vertex @ c8191c(基于顶点的更改)。我想将此名称更改为顶点的属性值。
2:这是最关键的一个。生成的顶点数不是静态的。 Number取决于应用程序的各种其他因素,并且每次应用程序运行时都可以更改。当我使用默认设置运行此应用程序时,节点重叠,并且只有一个显示在第一个位置。我需要在jgraph中随机分配节点。
有人可以帮我解决这两个问题。如果您需要进一步的信息,请提及。以下是我可视化图表的代码。
public void randomizeLocations(JGraph jgraph) {
System.out.println("Visualization 1");
GraphLayoutCache cache = jgraph.getGraphLayoutCache();
System.out.println("Visualization 2");
Random r = new Random();
for (Object item : jgraph.getRoots()) {
System.out.println("Visualization 3");
GraphCell cell = (GraphCell) item;
CellView view = cache.getMapping(cell, true);
Rectangle2D bounds = view.getBounds();
System.out.println("next double"+r.nextDouble()*400);
bounds.setRect(r.nextDouble() * 400, r.nextDouble() * 5,
bounds.getWidth(), bounds.getHeight());
}
System.out.println("Visualization 4");
cache.reload();
System.out.println("Visualization 5");
jgraph.repaint();
System.out.println("Visualization 6");
}
提前谢谢你。
答案 0 :(得分:0)
1)覆盖Vertices对象的toString方法。
@Override
public String toString() {
return "Whatever attribute you want to display here";
}
2)将顶点放在HashSet中。这将确保仅将唯一顶点添加到列表中。此外,您需要覆盖Vertices对象的.equals()和.hashCode()方法以确保唯一性。 (见https://stackoverflow.com/a/27609/441692)。继续生成更多顶点,直到您的HashSet大小等于您想要的值。
HashSet<Point2D.Double> unique = new HashSet<Point2D.Double>();
Random r = new Random();
for (Object item : jgraph.getRoots()) {
System.out.println("Visualization 3");
GraphCell cell = (GraphCell) item;
CellView view = cache.getMapping(cell, true);
Rectangle2D bounds = view.getBounds();
int currentSize = unique.size();
double x;
double y;
while (unique.size() == currentSize) {
x = r.nextDouble() * 400;
y = r.nextDouble() * 5;
unique.add(new Point2D.Double(x,y));
}
bounds.setRect(x, y, bounds.getWidth(), bounds.getHeight());
}