JUNG popup menu with rightclick mouse

I want to create a popup menu that will appear if I right-click on the canvas. How can i do this? What function should I change? Any help would be appreciated.

+4
source share
4 answers

The following code will create a popup menu by right-clicking on the top or on the canvas ...

/** * a GraphMousePlugin that offers popup * menu support */ protected class PopupGraphMousePlugin extends AbstractPopupGraphMousePlugin implements MouseListener { public PopupGraphMousePlugin() { this(MouseEvent.BUTTON3_MASK); } public PopupGraphMousePlugin(int modifiers) { super(modifiers); } /** * If this event is over a station (vertex), pop up a menu to * allow the user to perform a few actions; else, pop up a menu over the layout/canvas * * @param e */ protected void handlePopup(MouseEvent e) { final VisualizationViewer<GeoLocation.Station,GeoLocation.Link> vv = (VisualizationViewer<GeoLocation.Station,GeoLocation.Link>)e.getSource(); final Point2D p = e.getPoint(); final Point2D ivp = p; GraphElementAccessor<GeoLocation.Station,GeoLocation.Link> pickSupport = vv.getPickSupport(); if(pickSupport != null) { JPopupMenu popup = new JPopupMenu(); final GeoLocation.Station station = pickSupport.getVertex(vv.getGraphLayout(), ivp.getX(), ivp.getY()); if(station != null) { boolean isRadio = station.getParentSet().contains(STATION_IDENTIFIER_KEY); if(isRadio) if (station.getId().equalsIgnoreCase(SneakPeek.getUsername())){ String follow = "Follow " + station.getId(); if (followLocal){ follow = "Do not follow " + station.getId(); } else { follow = "Follow " + station.getId(); } popup.add(new AbstractAction("<html><center>" + follow) { public void actionPerformed(ActionEvent e) { followLocal = !followLocal; } }); } if(popup.getComponentCount() > 0) { popup.show(vv, e.getX(), e.getY()); } } } else { //to pop-up over the canvas/layout rather than over the station popup.add(new AbstractAction("Create Unit") { public void actionPerformed(ActionEvent e) { //do something here } }); if(popup.getComponentCount() > 0) { popup.show(vv, e.getX(), e.getY()); } } } } 

Add the class to the AbstractModalGraphMouse class, which the mouse processes to make it work:

 private AbstractModalGraphMouse graphMouse; ... graphMouse = new DefaultModalGraphMouse<Object, Object>(); vvMap.setGraphMouse(graphMouse); graphMouse.add(new PopupGraphMousePlugin()); 

The codes above work. But if you use different user data for common parts, you need to change the codes to suit your design.

+1
source
 protected class PopupGraphMousePlugin extends AbstractPopupGraphMousePlugin implements MouseListener { public PopupGraphMousePlugin() { this(MouseEvent.BUTTON3_MASK); } public PopupGraphMousePlugin(int modifiers) { super(modifiers); } /** * If this event is over a station (vertex), pop up a menu to * allow the user to perform a few actions; else, pop up a menu over the layout/canvas * * @param e */ @SuppressWarnings("unchecked") protected void handlePopup(MouseEvent e) { final VisualizationViewer<String,String> vv =(VisualizationViewer<String,String>)e.getSource(); final Point2D p = e.getPoint(); final Point2D ivp = p; JPopupMenu popup = new JPopupMenu(); System.out.println("mouse event!"); GraphElementAccessor<String,String> pickSupport = vv.getPickSupport(); System.out.println("GraphElementAccessor!"); if(pickSupport != null) { final String pickV = pickSupport.getVertex(vv.getGraphLayout(), ivp.getX(), ivp.getY()); if(pickV != null) { System.out.println("pickVisnotNull"); popup.add(new AbstractAction("Add New") { /** * */ public void actionPerformed(ActionEvent e) { System.out.println("person added"); } });//new abstraction } }///if picksupport }//handlePopup(MouseEvent e) }//PopupGraphMousePlugin 

what from your 1st code

this is the second part

 /Next, let just build a simple mouse, to allow picking, translating, and zooming. AbstractModalGraphMouse gMouse = new DefaultModalGraphMouse<Object, Object>(); vv.setGraphMouse(gMouse); //Add the mouse to our Visualization-Viewer. //PluggableGraphMouse pgm = new PluggableGraphMouse(); gMouse.add(new PickingGraphMousePlugin<Object, Object>()); //pgm.add(new TranslatingGraphMousePlugin(MouseEvent.BUTTON3_MASK)); gMouse.add(new PopupGraphMousePlugin()); gMouse.add(new ScalingGraphMousePlugin(new CrossoverScalingControl(), 0, 1 / 1.1f, 1.1f)); 
+2
source

This is not a particular JUNG issue - the canvas is a regular version of Swing canvas with some additional features grafted in and you don’t click on the graph element, but GraphEditorDemo and PluggableRendererDemo demonstrate something similar.

0
source
 protected void handlePopup(MouseEvent e) { final VisualizationViewer<Integer,Number> vv = (VisualizationViewer<Integer,Number>)e.getSource(); Point2D p = e.getPoint(); //vv.getRenderContext().getBasicTransformer().inverseViewTransform(e.getPoint()); GraphElementAccessor<Integer,Number> pickSupport = vv.getPickSupport(); if(pickSupport != null) { System.out.println("POPUP MOUSE is not NULL!"); final Integer v = pickSupport.getVertex(vv.getGraphLayout(), p.getX(), p.getY()); if(v != null) { JPopupMenu popup = new JPopupMenu(); popup.add(new AbstractAction("Decrease Transparency") { public void actionPerformed(ActionEvent e) { Double value = Math.min(1,transparency.get(v).doubleValue()+0.1); transparency.put(v, value);//vertex, value vv.repaint(); } }); popup.add(new AbstractAction("Increase Transparency"){ public void actionPerformed(ActionEvent e) { Double value = Math.max(0, transparency.get(v).doubleValue()-0.1); transparency.put(v, value); vv.repaint(); } }); popup.show(vv, e.getX(), e.getY()); } else { final Number edge = pickSupport.getEdge(vv.getGraphLayout(), p.getX(), p.getY()); if(edge != null) { JPopupMenu popup = new JPopupMenu(); popup.add(new AbstractAction(edge.toString()) { public void actionPerformed(ActionEvent e) { System.err.println("got "+edge); } });//popup.add popup.show(vv, e.getX(), e.getY()); }//if edge != null) } }// if(pickSupport != null) //rightclicked on Canvas else{ System.out.println("On Canvas!"); } }//handlePopup(MouseEvent e) 
0
source

Source: https://habr.com/ru/post/1411906/


All Articles