荣格模拟

JUNG Simulation

我正在 JUNG 做一个项目。我想添加一个鼠标事件,当用户移动节点或顶点时将调用该鼠标事件。 我尝试了多个侦听器,例如 ItemListener、GraphMouseListener..

我已经试过了,n 一些类似的代码:

          vv.addGraphMouseListener(new GraphMouseListener() {

            @Override
            public void graphClicked(Object v, MouseEvent me) {
                throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
            }

            @Override
            public void graphPressed(Object v, MouseEvent me) {
                throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
            }

            @Override
            public void graphReleased(Object v, MouseEvent me) {

           Object subject = me.getSource();
                // The graph uses Integers for vertices.
                if (subject instanceof VertexFactory) {
                    VertexFactory vertex = (VertexFactory) subject;
                    if (pickedState.isPicked(vertex)) {
//                        selectedNode = vertex;
                        System.out.println("Vertex " + vertex
                                + " is now selected");
                        re.calDistance(bs.get(0));
                        dest();
                        vv.repaint();
                        vv.updateUI();

                    }
                }
            }
       });

我建议扩展 PickingGraphMousePlugin 并将其添加到您的 GraphMouse

http://jung.sourceforge.net/doc/api/edu/uci/ics/jung/visualization/control/PickingGraphMousePlugin.html

public class MovingGraphMousePlugin<V, E> extends PickingGraphMousePlugin<V, E> {

    @Override
    public void mousePressed(MouseEvent e) {
        super.mousePressed(e);
        if(vertex != null) {
            System.out.println(vertex + " was picked.");
        }
    }
}

然后例如:

DefaultModalGraphMouse graphMouse = new DefaultModalGraphMouse();
graphMouse.add(new MovingGraphMousePlugin<V, E>());
visualViewer.setGraphMouse(graphMouse);

这只是一个粗略的示例,只会告诉您已经选取了一个顶点。如果要打印顶点是否已移动,则还必须重写 mouseReleased 方法。 然后,您必须比较按下鼠标和释放鼠标的两个点 (e.getPoint())。