2012-01-24 10 views
1

グラフに頂点とエッジを追加しながら、デフォルトのマウスメニューをオーバーライドしようとしています。私はこの例に従っていましたが、うまくいきましたが、マウスカーソルを変更するために何を(インターフェイスを実装する必要があるのか​​)知りたいのですが、また、マウスカーソルを変更して頂点を追加する必要がありますJUNG 2.0のEditingModalGraphMouseプラグインを使用したカスタムMouseMenu Java Framework

public class PopupVertexEdgeMenuMousePlugin<V, E> extends AbstractPopupGraphMousePlugin { 
    private JPopupMenu edgePopup, vertexPopup; 

    public PopupVertexEdgeMenuMousePlugin() { 
     this(MouseEvent.BUTTON3); 
    } 

    public PopupVertexEdgeMenuMousePlugin(int modifiers) { 
     super(modifiers); 
    } 

    protected void handlePopup(MouseEvent e) { 
     final VisualizationViewer<V,E> vv = 
       (VisualizationViewer<V,E>)e.getSource(); 
     Point2D p = e.getPoint(); 

     GraphElementAccessor<V,E> pickSupport = vv.getPickSupport(); 
     if(pickSupport != null) { 
      final V v = pickSupport.getVertex(vv.getGraphLayout(), p.getX(), p.getY()); 
      if(v != null) { 
       System.out.println("Vertex " + v + " was right clicked"); 
       updateVertexMenu(v, vv, p); 
       vertexPopup.show(vv, e.getX(), e.getY()); 
      } else { 
       final E edge = pickSupport.getEdge(vv.getGraphLayout(), p.getX(), p.getY()); 
       if(edge != null) { 
        System.out.println("Edge " + edge + " was right clicked"); 
        updateEdgeMenu(edge, vv, p); 
        edgePopup.show(vv, e.getX(), e.getY()); 

       } 
      } 
     } 
    } 

    private void updateVertexMenu(V v, VisualizationViewer vv, Point2D point) { 
     if (vertexPopup == null) return; 
     Component[] menuComps = vertexPopup.getComponents(); 
     for (Component comp: menuComps) { 
      if (comp instanceof VertexMenuListener) { 
       ((VertexMenuListener)comp).setVertexAndView(v, vv); 
      } 
      if (comp instanceof MenuPointListener) { 
       ((MenuPointListener)comp).setPoint(point); 
      } 
     } 

    } 

} 

ここで、グラフに頂点を追加するには、左クリックを使用します。右クリックするとこのオプションを追加します。また、編集モードでのみvertext/edgeを追加します。ピッキングモードでも同じようにするにはどうしたらいいですか?またはピッキングモードに見えるように編集モードを維持しながらカーソルを変更するかもしれませんか?

+0

のお手伝いをすることができ、あなたは[JUNGとJavaとのMouseEvents]を参照してもよいです(http://stackoverflow.com/questions/5958622/mouseevents- with-jung-and-java)を使ってマウス修飾子を変更する方法 –

答えて

0

両エッジと頂点を同時に右クリックすることはわかりませんが、どちらか一方の場合はうまく動作します。頂点用です。 jframeはあなたのjungが追加されるフレームです。

visualv.addGraphMouseListener(new MyGraphMouseListener<String, String>(jframe)); 
    ........ 
    private class MyGraphMouseListener<V, T> implements GraphMouseListener<V> {....} 

EDIT:これは任意のさらなる議論する前に、両方のPop-up menu using mouse rightclick in JUNG