在JUNG 2.0 Java框架中使用EditingModalGraphMouse插件定制鼠标

在JUNG 2.0 Java框架中使用EditingModalGraphMouse插件定制鼠标,java,swing,graph,jung,Java,Swing,Graph,Jung,我试图覆盖默认的鼠标菜单,同时向图形添加顶点和边。我遵循了这个示例,因为它工作正常,但我想知道如果要更改鼠标光标,我需要实现什么接口或进行任何更改,并且能够使用右键单击而不是左键单击添加顶点/边: public class PopupVertexEdgeMenuMousePlugin<V, E> extends AbstractPopupGraphMousePlugin { private JPopupMenu edgePopup, vertexPopup; pub

我试图覆盖默认的鼠标菜单,同时向图形添加顶点和边。我遵循了这个示例,因为它工作正常,但我想知道如果要更改鼠标光标,我需要实现什么接口或进行任何更改,并且能够使用右键单击而不是左键单击添加顶点/边:

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,如何使它在拾取模式下也能这样做?或者在保持编辑模式的同时更改光标,使其看起来像是拾取模式?

我不知道同时右键单击两条边和顶点,但对于其中一条边和顶点,效果很好。这是顶点。jframe是你的容格添加到的帧

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

编辑:这可以帮助您完成这两项工作

在进一步讨论之前,您可以参考有关如何修改鼠标修改器的内容