Создание «разных» вершин с помощью JUNG

#java #jung

#java #jung

Вопрос:

В принципе, у меня есть класс, GraphData.java , который содержит статические классы с конструкторами для создания вершин и ребер в моей Java с помощью программы JUNG. Одним из свойств в классе vertex, который у меня есть, является тип данных private int. На основе этого типа данных (либо 1, 2, либо 3) узел будет отображаться в виде круга, квадрата или треугольника. Это я могу сделать, когда вручную создаю узлы в своем основном классе и изменяю тип данных. Я ищу более динамичное решение.

Что я хочу иметь возможность сделать, так это сказать, что обычный щелчок левой кнопкой мыши установит тип данных равным 1, таким образом, нарисует круг, но если я удерживаю shift и щелкаю левой кнопкой мыши, он установит тип данных равным 2, таким образом, рисуя квадрат и ctrl щелчок для треугольника. Кто-нибудь знает, как это сделать? Заранее спасибо.

Вот мышь, которую я сейчас использую:

 EditingModalGraphMouse gm = new EditingModalGraphMouse(vv.getRenderContext(), 
GraphData.MyVertexFactory.getInstance(),
GraphData.MyEdgeFactory.getInstance());
  

Комментарии:

1. Существует существующий код, который по-разному интерпретирует различные виды событий мыши (см. плагины graph mouse). Вы должны быть в состоянии зацепиться за это.

Ответ №1:

Вы должны использовать Transformer, например, расширить EllipseVertexShapeTransformer и реализовать метод transform, когда вы можете изменить свою форму. Затем добавьте этот преобразователь в свой VisualizationViewer. Кроме того, проверьте исходный код демонстрационных версий JUNG — он охватывает большинство случаев.

Комментарии:

1. Я думал, что в первом абзаце ясно сказано, что я могу нормально изменять формы. У меня есть расширенный преобразователь a, я подключил его, и он работает. Что я хочу сделать, так это установить значение свойств вершин на основе того, был ли это обычный щелчок, shift или ctrl.