KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > prefuse > demos > applets > GraphView


1 package prefuse.demos.applets;
2
3 import java.awt.Color JavaDoc;
4 import java.awt.Dimension JavaDoc;
5
6 import javax.swing.BorderFactory JavaDoc;
7 import javax.swing.Box JavaDoc;
8 import javax.swing.BoxLayout JavaDoc;
9 import javax.swing.JComponent JavaDoc;
10 import javax.swing.JSplitPane JavaDoc;
11 import javax.swing.event.ChangeEvent JavaDoc;
12 import javax.swing.event.ChangeListener JavaDoc;
13
14 import prefuse.Display;
15 import prefuse.Visualization;
16 import prefuse.action.ActionList;
17 import prefuse.action.RepaintAction;
18 import prefuse.action.assignment.ColorAction;
19 import prefuse.action.filter.GraphDistanceFilter;
20 import prefuse.action.layout.graph.ForceDirectedLayout;
21 import prefuse.activity.Activity;
22 import prefuse.controls.DragControl;
23 import prefuse.controls.FocusControl;
24 import prefuse.controls.NeighborHighlightControl;
25 import prefuse.controls.PanControl;
26 import prefuse.controls.WheelZoomControl;
27 import prefuse.controls.ZoomControl;
28 import prefuse.controls.ZoomToFitControl;
29 import prefuse.data.Graph;
30 import prefuse.data.Tuple;
31 import prefuse.data.event.TupleSetListener;
32 import prefuse.data.io.GraphMLReader;
33 import prefuse.data.tuple.TupleSet;
34 import prefuse.render.DefaultRendererFactory;
35 import prefuse.render.LabelRenderer;
36 import prefuse.util.ColorLib;
37 import prefuse.util.GraphLib;
38 import prefuse.util.PrefuseLib;
39 import prefuse.util.force.ForceSimulator;
40 import prefuse.util.ui.JForcePanel;
41 import prefuse.util.ui.JPrefuseApplet;
42 import prefuse.util.ui.JValueSlider;
43 import prefuse.util.ui.UILib;
44 import prefuse.visual.NodeItem;
45 import prefuse.visual.VisualGraph;
46 import prefuse.visual.VisualItem;
47
48 /**
49  * @author <a HREF="http://jheer.org">jeffrey heer</a>
50  */

51 public class GraphView extends JPrefuseApplet {
52
53     private static final String JavaDoc graph = "graph";
54     private static final String JavaDoc nodes = "graph.nodes";
55     private static final String JavaDoc edges = "graph.edges";
56     
57     public void init() {
58         UILib.setPlatformLookAndFeel();
59         JComponent JavaDoc graphview = demo("/socialnet.xml", "name");
60         this.getContentPane().add(graphview);
61     }
62
63     public static JComponent JavaDoc demo(String JavaDoc datafile, String JavaDoc label) {
64         Graph g = null;
65         if ( datafile == null ) {
66             g = GraphLib.getGrid(15,15);
67         } else {
68             try {
69                 g = new GraphMLReader().readGraph(datafile);
70             } catch ( Exception JavaDoc e ) {
71                 e.printStackTrace();
72                 System.exit(1);
73             }
74         }
75         return demo(g, label);
76     }
77     
78     public static JComponent JavaDoc demo(Graph g, String JavaDoc label) {
79
80         // create a new, empty visualization for our data
81
final Visualization vis = new Visualization();
82         VisualGraph vg = vis.addGraph(graph, g);
83         vis.setValue(edges, null, VisualItem.INTERACTIVE, Boolean.FALSE);
84         
85         TupleSet focusGroup = vis.getGroup(Visualization.FOCUS_ITEMS);
86         focusGroup.addTupleSetListener(new TupleSetListener() {
87             public void tupleSetChanged(TupleSet ts, Tuple[] add, Tuple[] rem)
88             {
89                 for ( int i=0; i<rem.length; ++i )
90                     ((VisualItem)rem[i]).setFixed(false);
91                 for ( int i=0; i<add.length; ++i ) {
92                     ((VisualItem)add[i]).setFixed(false);
93                     ((VisualItem)add[i]).setFixed(true);
94                 }
95                 vis.run("draw");
96             }
97         });
98         
99         // set up the renderers
100
LabelRenderer tr = new LabelRenderer(label);
101         tr.setRoundedCorner(8, 8);
102         vis.setRendererFactory(new DefaultRendererFactory(tr));
103         
104        
105         
106         // -- set up the actions ----------------------------------------------
107

108         int maxhops = 4, hops = 4;
109         final GraphDistanceFilter filter = new GraphDistanceFilter(graph, hops);
110
111         ActionList draw = new ActionList();
112         draw.add(filter);
113         draw.add(new ColorAction(nodes, VisualItem.FILLCOLOR, ColorLib.rgb(200,200,255)));
114         draw.add(new ColorAction(nodes, VisualItem.STROKECOLOR, 0));
115         draw.add(new ColorAction(nodes, VisualItem.TEXTCOLOR, ColorLib.rgb(0,0,0)));
116         draw.add(new ColorAction(edges, VisualItem.FILLCOLOR, ColorLib.gray(200)));
117         draw.add(new ColorAction(edges, VisualItem.STROKECOLOR, ColorLib.gray(200)));
118         
119         ColorAction fill = new ColorAction(nodes,
120                 VisualItem.FILLCOLOR, ColorLib.rgb(200,200,255));
121         fill.add("_fixed", ColorLib.rgb(255,100,100));
122         fill.add("_highlight", ColorLib.rgb(255,200,125));
123         
124         ForceDirectedLayout fdl = new ForceDirectedLayout(graph);
125         ForceSimulator fsim = fdl.getForceSimulator();
126         fsim.getForces()[0].setParameter(0, -1.2f);
127         
128         ActionList animate = new ActionList(Activity.INFINITY);
129         animate.add(fdl);
130         animate.add(fill);
131         animate.add(new RepaintAction());
132         
133         // finally, we register our ActionList with the Visualization.
134
// we can later execute our Actions by invoking a method on our
135
// Visualization, using the name we've chosen below.
136
vis.putAction("draw", draw);
137         vis.putAction("layout", animate);
138         vis.runAfter("draw", "layout");
139         
140         
141         // --------------------------------------------------------------------
142
// STEP 4: set up a display to show the visualization
143

144         Display display = new Display(vis);
145         display.setSize(500,500);
146         display.setForeground(Color.GRAY);
147         display.setBackground(Color.WHITE);
148         
149         // main display controls
150
display.addControlListener(new FocusControl(1));
151         display.addControlListener(new DragControl());
152         display.addControlListener(new PanControl());
153         display.addControlListener(new ZoomControl());
154         display.addControlListener(new WheelZoomControl());
155         display.addControlListener(new ZoomToFitControl());
156         display.addControlListener(new NeighborHighlightControl());
157         
158         display.setForeground(Color.GRAY);
159         display.setBackground(Color.WHITE);
160         
161         // --------------------------------------------------------------------
162
// STEP 5: launching the visualization
163

164         // create a panel for editing force values
165
final JForcePanel fpanel = new JForcePanel(fsim);
166         
167         final JValueSlider slider = new JValueSlider("Distance", 0, maxhops, hops);
168         slider.addChangeListener(new ChangeListener JavaDoc() {
169             public void stateChanged(ChangeEvent JavaDoc e) {
170                 filter.setDistance(slider.getValue().intValue());
171                 vis.run("draw");
172             }
173         });
174         slider.setBackground(Color.WHITE);
175         slider.setPreferredSize(new Dimension JavaDoc(300,30));
176         slider.setMaximumSize(new Dimension JavaDoc(300,30));
177         
178         Box JavaDoc cf = new Box JavaDoc(BoxLayout.Y_AXIS);
179         cf.add(slider);
180         cf.setBorder(BorderFactory.createTitledBorder("Connectivity Filter"));
181         fpanel.add(cf);
182         
183         fpanel.add(Box.createVerticalGlue());
184         
185         // create a new JSplitPane to present the interface
186
JSplitPane JavaDoc split = new JSplitPane JavaDoc();
187         split.setLeftComponent(display);
188         split.setRightComponent(fpanel);
189         split.setOneTouchExpandable(true);
190         split.setContinuousLayout(false);
191         split.setDividerLocation(530);
192         split.setDividerLocation(800);
193         
194         
195         // position and fix the default focus node
196
NodeItem focus = (NodeItem)vg.getNode(0);
197         PrefuseLib.setX(focus, null, 400);
198         PrefuseLib.setY(focus, null, 250);
199         focusGroup.setTuple(focus);
200
201         // now we run our action list and return
202
return split;
203     }
204     
205 } // end of class GraphView
206
Popular Tags