package one; import java.awt.Color; import java.awt.event.MouseEvent; import javax.swing.JFrame; import javax.swing.JSplitPane; import javax.swing.JPanel; import prefuse.Constants; import prefuse.Display; import prefuse.Visualization; import prefuse.action.ActionList; import prefuse.action.RepaintAction; import prefuse.action.assignment.ColorAction; import prefuse.action.layout.RandomLayout; import prefuse.action.layout.graph.ForceDirectedLayout; import prefuse.activity.Activity; import prefuse.controls.Control; import prefuse.controls.ControlAdapter; import prefuse.controls.DragControl; import prefuse.controls.NeighborHighlightControl; import prefuse.controls.PanControl; import prefuse.controls.ZoomControl; import prefuse.controls.ZoomToFitControl; import prefuse.data.Graph; import prefuse.data.io.DataIOException; import prefuse.data.io.GraphMLReader; import prefuse.render.DefaultRendererFactory; import prefuse.render.LabelRenderer; import prefuse.util.ColorLib; import prefuse.visual.VisualItem; public class Application { public static void main(String[] args){ /* //Build Basic label visualization Application a = new Application(); Graph myGraph = a.buildGraph("staff.xml"); Visualization myViz = a.buildVisualization(myGraph); Display myDisplay = a.buildDisplay(myViz); */ //Build Image Visualization Application a = new Application(); Graph myGraph = a.buildGraph("staffnoedge.xml"); Visualization myViz = a.buildPicVisualization(myGraph); Display myDisplay = a.buildDisplay(myViz); JPanel myButtons = a.buildControlDisplay(); JSplitPane split = new JSplitPane(); JFrame myFrame = new JFrame("Application"); myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); split.setLeftComponent(myDisplay); myFrame.add(split); //myFrame.add(myDisplay); myFrame.pack(); myFrame.setVisible(true); myViz.run("draw"); myViz.run("random"); } public Graph buildGraph(String datafile){ Graph g = null; try { g = new GraphMLReader().readGraph(datafile); }catch (DataIOException e){ System.err.println("Couldn't load graph"); e.printStackTrace(); System.exit(1); } return(g); } public Visualization buildPicVisualization(Graph g){ Visualization v = new Visualization(); v.add("graph", g); LabelRenderer lr = new LabelRenderer("name", "pic"); lr.setTextField("name"); lr.setImageField("pic"); lr.setRoundedCorner(8, 8); lr.setHorizontalPadding(5); lr.setVerticalPadding(5); lr.setImagePosition(Constants.TOP); v.setRendererFactory(new DefaultRendererFactory(lr)); //lr.getImageFactory().preloadImages(v.items(), "pic"); //ImageFactory imgf = lr.getImageFactory(); //imgf.preloadImages(v.items(), "pic"); //Build the Coloring Action ColorAction fill = new ColorAction("graph.nodes", VisualItem.FILLCOLOR, ColorLib.rgb(200,200,255)); //Build the drawing Action List ActionList draw = new ActionList(); draw.add(fill); draw.add(new ColorAction("graph.nodes", VisualItem.STROKECOLOR,0)); draw.add(new ColorAction("graph.nodes", VisualItem.TEXTCOLOR, ColorLib.rgb(0, 0, 0))); draw.add(new ColorAction("graph.edges", VisualItem.FILLCOLOR, ColorLib.gray(200))); draw.add(new ColorAction("graph.edges", VisualItem.STROKECOLOR, ColorLib.gray(200))); //Physics Action List ActionList physics = new ActionList(Activity.INFINITY); physics.add(new ForceDirectedLayout("graph", true)); physics.add(fill); physics.add(new RepaintAction()); //Initial Randomized Layout ActionList random = new ActionList(200); random.add(new RandomLayout("graph")); //Register the action lists w/ the visualization v.putAction("draw", draw); v.putAction("random", random); v.putAction("physics", physics); v.runAfter("draw", "physics"); return(v); } public Visualization buildVisualization(Graph g){ //Build Visualization Visualization v = new Visualization(); v.add("graph", g); //Set up Label Renderer LabelRenderer lr = new LabelRenderer(); lr.setRoundedCorner(8, 8); lr.setTextField("name"); v.setRendererFactory(new DefaultRendererFactory(lr)); //Build the Coloring Action ColorAction fill = new ColorAction("graph.nodes", VisualItem.FILLCOLOR, ColorLib.rgb(200,200,255)); //Build the drawing Action List ActionList draw = new ActionList(); draw.add(fill); draw.add(new ColorAction("graph.nodes", VisualItem.STROKECOLOR,0)); draw.add(new ColorAction("graph.nodes", VisualItem.TEXTCOLOR, ColorLib.rgb(0, 0, 0))); draw.add(new ColorAction("graph.edges", VisualItem.FILLCOLOR, ColorLib.gray(200))); draw.add(new ColorAction("graph.edges", VisualItem.STROKECOLOR, ColorLib.gray(200))); //Physics Action List ActionList physics = new ActionList(Activity.INFINITY); physics.add(new ForceDirectedLayout("graph")); physics.add(fill); physics.add(new RepaintAction()); //Register the action lists w/ the visualization v.putAction("draw", draw); v.putAction("physics", physics); v.runAfter("draw", "physics"); return(v); } public Display buildDisplay(Visualization v){ //Build Display Display d = new Display(v); d.setSize(500,500); d.setForeground(Color.GRAY); d.setBackground(Color.WHITE); //Set up Display Controls d.addControlListener(new DragControl()); d.addControlListener(new PanControl()); d.addControlListener(new ZoomControl()); d.addControlListener(new ZoomToFitControl()); d.addControlListener(new NeighborHighlightControl()); //d.addControlListener(mouse_hover); return(d); } public JPanel buildControlDisplay(){ JPanel jp = new JPanel(); return(jp); } }