2013-04-12 2 views
1

Я использую jgraphx 1.12.0.2, и я пытаюсь переставить вершины графа из кода. Код выглядит примерно так:Перемещение ячеек с помощью JGraphX ​​

Object[] roots = graph.getChildCells(graph.getDefaultParent(), true, false); 
graph.getModel().beginUpdate(); 
for (int i = 0; i < roots.length; i++) { 
    Object[] root = {roots[i]}; 
    graph.moveCells(root, i * 10 + 5, 50); 
    /* these two lines were added because I thought they might help with the problem */ 
    /* with or without them, the result is the same */ 
    graph.getView().clear(root, true, true); 
    graph.getView().validate(); 
} 
graph.refresh(); 
graph.getModel().endUpdate(); 

Проблема, конечно, что клетки не перемещаются в указанных положениях. В чем может быть проблема?

Спасибо!

+0

Ваш код работает для меня. Единственная проблема, с которой я столкнулся, края не двигаются должным образом. – Marco

ответ

0

Вам не нужно обновлять, очищать или проверять. Если вы выберете правильную операцию, все будет сделано для вас. Стоит полностью прочитать section 2 of the User Manual, он объясняет основные методы API-интерфейсов.

В этом случае вы хотите выполнить model.setGeometry() в пределах begin/end update. Но убедитесь, что вы не используете объект геометрии, полученный из getGeometry, вы должны использовать либо новый объект, либо клон объекта из получателя. Изменение объектов модели на месте разбивает модель отмены.

+0

Использование setGeometry может быть сложным, так как вся система координат также перемещается. По умолчанию x = 0, y = 0. См. Следующий пример: Сначала мы используем значение по умолчанию x = 0, y = 0. Ввод новой вершины с x = 70, y = 70, очевидно, получается в x = 70, y = 70. Теперь мы изменим геометрию на x = 50, y = 50. Если мы добавим новую вершину с x = 10, y = 10: Новые базовые координаты x = 50 и y = 50. По умолчанию (x = 0, y = 0) вершина находится в точке x = 60 и y = 60, так как x = 50, y = 50 - новое начало координат, а не в x = 10, y = 10. Так что имейте это в виду, чтобы избежать путаницы. – Marco