2015-01-05 44 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

謝謝你的回答。它幫助並解決了我的問題。 :-) –