Пользовательское MouseMenu с использованием плагина EditingModalGraphMouse в JUNG 2.0 Java Framework - PullRequest
1 голос
/ 24 января 2012

Я пытаюсь переопределить меню мыши по умолчанию, добавляя вершины и ребра на график. Я следовал этому примеру, так как он работает нормально, но я хочу знать, что (интерфейсы мне нужно реализовать, если таковые имеются) или изменения, которые я должен сделать, чтобы изменить курсор мыши, а также иметь возможность добавлять вершины / ребра, используя правую щелкните вместо левой кнопки мыши:

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 только в режиме редактирования, как я могу сделать то же самое в режиме выбора? или, возможно, изменить курсор при сохранении режима редактирования, чтобы он выглядел как режим выбора?

1 Ответ

0 голосов
/ 25 июля 2014

Я не знаю, щелкнуть правой кнопкой мыши одновременно для ребер и вершин, но для одного из них это работает нормально. это для вершины. jframe - ваш фрейм, к которому добавлен ваш юнг.

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

РЕДАКТИРОВАТЬ: это может помочь вам с обоими всплывающими меню с помощью щелчка правой кнопкой мыши в JUNG

...