2015-01-05 53 views
0

我正在JUNG做一个项目。我想添加一个鼠标事件,当用户移动一个节点或顶点时将会调用它。 我已经尝试了多个监听器一样,的ItemListener,GraphMouseListener ..JUNG Simulation

我曾经尝试这样做,正一些类似代码:

  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(); 

        } 
       } 
      } 
     }); 

回答

1

我会建议延长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())。

+0

谢谢你的回答。它帮助并解决了我的问题。 :-) –