我试图覆盖默认的鼠标菜单,同时向图形添加顶点和边。我遵循这个例子,因为它工作得很好,但我想知道我需要实现什么(如果有的话,我需要实现接口)或更改才能更改鼠标光标,还可以使用右键而不是左键添加顶点/边缘:
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是你的jung添加到的框架。
visualv.addGraphMouseListener(new MyGraphMouseListener<String, String>(jframe));
........
private class MyGraphMouseListener<V, T> implements GraphMouseListener<V> {....}
编辑:这可以帮助您在JUNG 中使用鼠标右键点击两个弹出菜单