2016-04-27 9 views
0

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

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

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.... 

Спасибо.

ответ

1

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

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

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

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

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