頂点付近にマウスがある場合のみ,頂点を指定可能とする(エッジも同様)

// 頂点付近にマウスがある場合のみ,頂点を指定できる                             
import javax.swing.JFrame;
import edu.uci.ics.jung.graph.Graph;
import edu.uci.ics.jung.graph.UndirectedGraph;
import edu.uci.ics.jung.graph.Vertex;
import edu.uci.ics.jung.graph.impl.UndirectedSparseEdge;
import edu.uci.ics.jung.graph.impl.UndirectedSparseGraph;
import edu.uci.ics.jung.graph.impl.UndirectedSparseVertex;
import edu.uci.ics.jung.visualization.Layout;
import edu.uci.ics.jung.visualization.PluggableRenderer;
import edu.uci.ics.jung.visualization.VisualizationViewer;
import edu.uci.ics.jung.visualization.FRLayout;
import edu.uci.ics.jung.visualization.control.PluggableGraphMouse;
import edu.uci.ics.jung.visualization.control.TranslatingGraphMousePlugin;
import edu.uci.ics.jung.visualization.control.ScalingGraphMousePlugin;
import edu.uci.ics.jung.visualization.control.ViewScalingControl;
import edu.uci.ics.jung.visualization.control.LayoutScalingControl;
import java.awt.Color;

// pickSupport のための import                                                  
import edu.uci.ics.jung.visualization.control.PickingGraphMousePlugin;
import edu.uci.ics.jung.visualization.ShapePickSupport;


public class Sample08 extends JFrame {

    public static void main(String[] args) {
	JFrame window = new JFrame("Sample01");

        // 疎な無向グラフの作成                                                 
        Graph graph = new UndirectedSparseGraph();

	// 頂点を作成し,グラフに追加                                           
	Vertex vertex1 = graph.addVertex(new UndirectedSparseVertex());
	Vertex vertex2 = graph.addVertex(new UndirectedSparseVertex());
	Vertex vertex3 = graph.addVertex(new UndirectedSparseVertex());
	Vertex vertex4 = graph.addVertex(new UndirectedSparseVertex());

	// エッジを作成し,グラフに追加                                         
	graph.addEdge(new UndirectedSparseEdge(vertex1, vertex2));
	graph.addEdge(new UndirectedSparseEdge(vertex2, vertex3));
	graph.addEdge(new UndirectedSparseEdge(vertex3, vertex1));
	graph.addEdge(new UndirectedSparseEdge(vertex1, vertex4));

	// グラフの配置を FR レイアウト(Fruchterman-Reingold algorithm)に       
	// 従う                                                                 
	Layout layout = new FRLayout(graph);

	// Rendererインタフェース(頂点やエッジの描画を担当)                   
	PluggableRenderer renderer = new PluggableRenderer();

	// VisualizationViewer(グラフを表示するパネル)                        
	// JPanel を継承しているため,JFrame に貼り付けることができる.         
	VisualizationViewer viewer = new VisualizationViewer(layout, renderer);

	// PluggableGraphMouse を用いて,マウスによる Zoom, Pan, Picking の     
	// 機能を追加                                                           
	//                                                                      
	// (メモ:その1)                                                       
	// 後述の setPickSupport() を機能させるためには                         
	//   graphMouse.add(new PickingGraphMousePlugin());                     
	// が必要である                                                         
	//                                                                      
	// (メモ:その2)                                                       
        // pick した後の頂点の移動は Ctrl または Shift キーを押しながら         
	// マウスをドラッグすればよい                                           
	PluggableGraphMouse graphMouse = new PluggableGraphMouse();
	graphMouse.add(new TranslatingGraphMousePlugin());      // 視点移動     

        graphMouse.add(new ScalingGraphMousePlugin(new LayoutScalingControl(), 0));     // 拡大・縮小                                                          
        graphMouse.add(new PickingGraphMousePlugin());

        viewer.setGraphMouse(graphMouse);

        // 4番目の引数 pickSize はエッジを指定する場合,その周辺をどこまで     
        // エッジとみなすか,を指定する                                         
        // なお,ShapePickSupport のコンストラクタは複数,存在し,              
        // pickSize = 2 でよければ                                              
        //    viewer.setPickSupport(new ShapePickSupport(2));                   
        // または                                                               
        //    viewer.setPickSupport(new ShapePickSupport());                    
        // としてもよい.                                                       
        viewer.setPickSupport(new ShapePickSupport(viewer, viewer, renderer, 2));

        // VisualizationViewer を JFrame へ貼り付ける                           
        window.add(viewer);

        // JFrame の各種設定                                                    
        window.setSize(600, 600);
        window.setLocationRelativeTo(null);
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setVisible(true);
    }
}