Случайное размещение вершин в jgraph
Я создал приложение с помощью jgraph для визуализации. У меня есть пара проблем, касающихся этого.
1: мне нужно изменить имена вершин в соответствии с атрибутом объекта вершины. Когда я запускаю приложение с настройками по умолчанию, имена вершин печатаются как Vertex@c8191c (изменения основаны на вершине). Я хочу изменить это имя на значение атрибута вершины.
2: это самый важный. Количество генерируемых вершин не является статичным. Число зависит от различных других факторов приложения и может меняться при каждом запуске приложения. Когда я запускаю это приложение с настройками по умолчанию, узлы перекрываются, и на первом месте отображается только один. Мне нужно распределить узлы случайным образом внутри 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");
}
Заранее спасибо.
1 ответ
1) Переопределите метод toString вашего объекта Vertices.
@Override
public String toString() {
return "Whatever attribute you want to display here";
}
2) Поместите свои вершины в HashSet. Это обеспечит добавление уникальных вершин только в ваш список. Более того, вам необходимо переопределить методы.equals() и.hashCode() вашего объекта Vertices, чтобы обеспечить уникальность. (См. Здесь /questions/17627416/kakie-problemyi-sleduet-uchityivat-pri-pereopredelenii-equals-i-hashcode-v-java/17627436#17627436). Продолжайте генерировать больше вершин, пока размер вашего 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());
}