Как вы можете ответить на событие мыши в jGraphx?

Используя jGraphx, я смог построить простую диаграмму, отражающую архитектуру программы. Этот граф будет доступен только для чтения, т. е. пользователь может изменять положение вершин, но больше ничего (кстати, я установил для редактируемых ячеек и соединяемых ребер значение false, но по-прежнему можно рисовать соединения (?) ).

Вопрос в том, что я хочу иметь возможность отображать контекстное меню, когда пользователь нажимает на вершины. Как я могу это сделать? Мой код более или менее выглядит следующим образом:

mxGraph graph = new mxGraph();
graph.getModel().beginUpdate();

...
Object box = graph.insertVertex( parent, null, obj.getName(), pos, level, 60, 30 );
inheritanceConnections.add( obj );
boxes.put( obj.getPath(), box );
...

// Draw inheritance vertexes
for(ObjectBag obj: inheritanceConnections) {
    graph.insertEdge( parent, null, "", boxes.get( obj.getPath() ), boxes.get( obj.getParentObject().getPath() ) );
}
graph.getModel().endUpdate()

По сути, сначала рисуются все объекты, а затем устанавливаются связи между ними (будучи родительским объектом другого объекта).

Я хотел бы иметь возможность сделать что-то вроде:

Object box = graph.insertVertex( parent, null, obj.getName(), pos, level, 60, 30 );
box.addMouseListener( new MouseListener....

Спасибо.


person Baltasarq    schedule 27.04.2016    source источник


Ответы (1)


Вы можете сделать это так:

graph.getGraphComponent().getGraphControl().addMouseListener(...)

А затем получите ячейку для события мыши:

@Override
public void mouseReleased(MouseEvent e) {
    Object cell = graph.getGraphComponent().getCellAt(e.getX(), e.getY());
    ...add logic...
}

Затем вы можете проверить, не является ли ячейка нулевой и является вершиной.

person Xavier M.    schedule 11.05.2016
comment
В mxGraph нет метода getGraphComponent(), о каком классе вы говорите? - person Jesse Barnum; 27.06.2020