1

我正在尝试覆盖默认鼠标菜单,同时将顶点和边添加到图形中。我正在关注这个示例,因为它工作正常,但我想知道什么(如果有的话,我需要实现的接口)或我必须进行哪些更改才能更改鼠标光标并且还能够使用右添加顶点/边单击而不是左键单击:

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

    }

}  

在这里,它使用左键向图形添加顶点,我想在右键单击时添加此选项。而且它只在编辑模式下添加顶点/边缘,我怎样才能让它在拾取模式下也做同样的事情?或者可能在保持编辑模式的同时更改光标,使其看起来像拾取模式?

4

1 回答 1

0

我不知道同时右键单击边和顶点,但对于其中一个,它工作正常。它用于顶点。jframe 是您添加 Jung 的框架。

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

编辑:这可以帮助您在 JUNG 中使用鼠标右键单击弹出菜单

于 2014-07-25T17:32:33.980 回答