package test2;import java.awt.Color;
import java.awt.Dimension;import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JComponent;
import javax.swing.JSplitPane;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;import prefuse.Display;
import prefuse.Visualization;
import prefuse.action.ActionList;
import prefuse.action.RepaintAction;
import prefuse.action.assignment.ColorAction;
import prefuse.action.filter.GraphDistanceFilter;
import prefuse.action.layout.graph.ForceDirectedLayout;
import prefuse.activity.Activity;
import prefuse.controls.DragControl;
import prefuse.controls.FocusControl;
import prefuse.controls.NeighborHighlightControl;
import prefuse.controls.PanControl;
import prefuse.controls.WheelZoomControl;
import prefuse.controls.ZoomControl;
import prefuse.controls.ZoomToFitControl;
import prefuse.data.Graph;
import prefuse.data.Tuple;
import prefuse.data.event.TupleSetListener;
import prefuse.data.io.GraphMLReader;
import prefuse.data.tuple.TupleSet;
import prefuse.render.DefaultRendererFactory;
import prefuse.render.LabelRenderer;
import prefuse.util.ColorLib;
import prefuse.util.GraphLib;
import prefuse.util.PrefuseLib;
import prefuse.util.force.ForceSimulator;
import prefuse.util.ui.JForcePanel;
import prefuse.util.ui.JPrefuseApplet;
import prefuse.util.ui.JValueSlider;
import prefuse.util.ui.UILib;
import prefuse.visual.NodeItem;
import prefuse.visual.VisualGraph;
import prefuse.visual.VisualItem;/**
* @author <a href="http://jheer.org">jeffrey heer</a>
*/
public class GraphView extends JPrefuseApplet { private static final String graph = "graph";
private static final String nodes = "graph.nodes";
private static final String edges = "graph.edges";
public void init() {
UILib.setPlatformLookAndFeel();
JComponent graphview = demo("/liuhongjie.xml", "name");
this.getContentPane().add(graphview);
} public static JComponent demo(String datafile, String label) {
//第一步是将可视化化需要的数据读入prefuse内部的数据结构,此例选择的是内部的graph结构
Graph g = null;
if ( datafile == null ) {
g = GraphLib.getGrid(15,15);
} else {
try {
g = new GraphMLReader().readGraph(datafile);//此步骤可能包括很多次的数据转换
} catch ( Exception e ) {
e.printStackTrace();
System.exit(1);
}
}
return demo(g, label);
}
public static JComponent demo(Graph g, String label) { // create a new, empty visualization for our data
//创建一个可视化图的抽象概念(内部存储的数据结构)
final Visualization vis = new Visualization();//此结构包括原始数据域和新的可视化信息,如:x,y坐标,颜色,大小
VisualGraph vg = vis.addGraph(graph, g);
vis.setValue(edges, null, VisualItem.INTERACTIVE, Boolean.FALSE);
TupleSet focusGroup = vis.getGroup(Visualization.FOCUS_ITEMS);
focusGroup.addTupleSetListener(new TupleSetListener() {
public void tupleSetChanged(TupleSet ts, Tuple[] add, Tuple[] rem)
{
for ( int i=0; i<rem.length; ++i )
((VisualItem)rem[i]).setFixed(false);
for ( int i=0; i<add.length; ++i ) {
((VisualItem)add[i]).setFixed(false);
((VisualItem)add[i]).setFixed(true);
}
vis.run("draw");
}
});
// set up the renderers
//render和render工厂,用来传递数据
LabelRenderer tr = new LabelRenderer(label);//使用label来创建带有标签的节点
tr.setRoundedCorner(8, 8);
vis.setRendererFactory(new DefaultRendererFactory(tr));//决定图形怎么画的主要工具
// -- set up the actions ----------------------------------------------
int maxhops = 4, hops = 4;
final GraphDistanceFilter filter = new GraphDistanceFilter(graph, hops); ActionList draw = new ActionList();
draw.add(filter);
draw.add(new ColorAction(nodes, VisualItem.FILLCOLOR, ColorLib.rgb(200,200,255)));
draw.add(new ColorAction(nodes, VisualItem.STROKECOLOR, 0));
draw.add(new ColorAction(nodes, VisualItem.TEXTCOLOR, ColorLib.rgb(0,0,0)));
draw.add(new ColorAction(edges, VisualItem.FILLCOLOR, ColorLib.gray(200)));
draw.add(new ColorAction(edges, VisualItem.STROKECOLOR, ColorLib.gray(200)));
ColorAction fill = new ColorAction(nodes,
VisualItem.FILLCOLOR, ColorLib.rgb(200,200,255));
fill.add("_fixed", ColorLib.rgb(255,100,100));
fill.add("_highlight", ColorLib.rgb(255,200,125));
ForceDirectedLayout fdl = new ForceDirectedLayout(graph);
ForceSimulator fsim = fdl.getForceSimulator();
fsim.getForces()[0].setParameter(0, -1.2f);
ActionList animate = new ActionList(Activity.INFINITY);
animate.add(fdl);
animate.add(fill);
animate.add(new RepaintAction());
// finally, we register our ActionList with the Visualization.
// we can later execute our Actions by invoking a method on our
// Visualization, using the name we've chosen below.
vis.putAction("draw", draw);
vis.putAction("layout", animate);
vis.runAfter("draw", "layout");
// --------------------------------------------------------------------
// STEP 4: set up a display to show the visualization
//显示和交互控制
Display display = new Display(vis);//显示可视化数据
display.setSize(500,500);
display.setForeground(Color.GRAY);
display.setBackground(Color.WHITE);
// main display controls
display.addControlListener(new FocusControl(1));
display.addControlListener(new DragControl());
display.addControlListener(new PanControl());
display.addControlListener(new ZoomControl());
display.addControlListener(new WheelZoomControl());
display.addControlListener(new ZoomToFitControl());
display.addControlListener(new NeighborHighlightControl());
display.setForeground(Color.GRAY);
display.setBackground(Color.WHITE);
// --------------------------------------------------------------------
// STEP 5: launching the visualization
// create a panel for editing force values
final JForcePanel fpanel = new JForcePanel(fsim);
final JValueSlider slider = new JValueSlider("Distance", 0, maxhops, hops);
slider.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
filter.setDistance(slider.getValue().intValue());
vis.run("draw");
}
});
slider.setBackground(Color.WHITE);
slider.setPreferredSize(new Dimension(300,30));
slider.setMaximumSize(new Dimension(300,30));
Box cf = new Box(BoxLayout.Y_AXIS);
cf.add(slider);
cf.setBorder(BorderFactory.createTitledBorder("Connectivity Filter"));
fpanel.add(cf);
fpanel.add(Box.createVerticalGlue());
// create a new JSplitPane to present the interface
JSplitPane split = new JSplitPane();
split.setLeftComponent(display);
split.setRightComponent(fpanel);
split.setOneTouchExpandable(true);
split.setContinuousLayout(false);
split.setDividerLocation(530);
split.setDividerLocation(800);
// position and fix the default focus node
NodeItem focus = (NodeItem)vg.getNode(0);
PrefuseLib.setX(focus, null, 400);
PrefuseLib.setY(focus, null, 250);
focusGroup.setTuple(focus); // now we run our action list and return
return split;
}
} // end of class GraphView
这段代码。。 有一些地方看不懂。。 知道的朋友帮加下注释吧 还有就是。 我现在有一个xml文档。 里面有一些游离的节点。。在本例 的 图中是没有办法显示的 求教 如何让他可以显示?
import java.awt.Dimension;import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JComponent;
import javax.swing.JSplitPane;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;import prefuse.Display;
import prefuse.Visualization;
import prefuse.action.ActionList;
import prefuse.action.RepaintAction;
import prefuse.action.assignment.ColorAction;
import prefuse.action.filter.GraphDistanceFilter;
import prefuse.action.layout.graph.ForceDirectedLayout;
import prefuse.activity.Activity;
import prefuse.controls.DragControl;
import prefuse.controls.FocusControl;
import prefuse.controls.NeighborHighlightControl;
import prefuse.controls.PanControl;
import prefuse.controls.WheelZoomControl;
import prefuse.controls.ZoomControl;
import prefuse.controls.ZoomToFitControl;
import prefuse.data.Graph;
import prefuse.data.Tuple;
import prefuse.data.event.TupleSetListener;
import prefuse.data.io.GraphMLReader;
import prefuse.data.tuple.TupleSet;
import prefuse.render.DefaultRendererFactory;
import prefuse.render.LabelRenderer;
import prefuse.util.ColorLib;
import prefuse.util.GraphLib;
import prefuse.util.PrefuseLib;
import prefuse.util.force.ForceSimulator;
import prefuse.util.ui.JForcePanel;
import prefuse.util.ui.JPrefuseApplet;
import prefuse.util.ui.JValueSlider;
import prefuse.util.ui.UILib;
import prefuse.visual.NodeItem;
import prefuse.visual.VisualGraph;
import prefuse.visual.VisualItem;/**
* @author <a href="http://jheer.org">jeffrey heer</a>
*/
public class GraphView extends JPrefuseApplet { private static final String graph = "graph";
private static final String nodes = "graph.nodes";
private static final String edges = "graph.edges";
public void init() {
UILib.setPlatformLookAndFeel();
JComponent graphview = demo("/liuhongjie.xml", "name");
this.getContentPane().add(graphview);
} public static JComponent demo(String datafile, String label) {
//第一步是将可视化化需要的数据读入prefuse内部的数据结构,此例选择的是内部的graph结构
Graph g = null;
if ( datafile == null ) {
g = GraphLib.getGrid(15,15);
} else {
try {
g = new GraphMLReader().readGraph(datafile);//此步骤可能包括很多次的数据转换
} catch ( Exception e ) {
e.printStackTrace();
System.exit(1);
}
}
return demo(g, label);
}
public static JComponent demo(Graph g, String label) { // create a new, empty visualization for our data
//创建一个可视化图的抽象概念(内部存储的数据结构)
final Visualization vis = new Visualization();//此结构包括原始数据域和新的可视化信息,如:x,y坐标,颜色,大小
VisualGraph vg = vis.addGraph(graph, g);
vis.setValue(edges, null, VisualItem.INTERACTIVE, Boolean.FALSE);
TupleSet focusGroup = vis.getGroup(Visualization.FOCUS_ITEMS);
focusGroup.addTupleSetListener(new TupleSetListener() {
public void tupleSetChanged(TupleSet ts, Tuple[] add, Tuple[] rem)
{
for ( int i=0; i<rem.length; ++i )
((VisualItem)rem[i]).setFixed(false);
for ( int i=0; i<add.length; ++i ) {
((VisualItem)add[i]).setFixed(false);
((VisualItem)add[i]).setFixed(true);
}
vis.run("draw");
}
});
// set up the renderers
//render和render工厂,用来传递数据
LabelRenderer tr = new LabelRenderer(label);//使用label来创建带有标签的节点
tr.setRoundedCorner(8, 8);
vis.setRendererFactory(new DefaultRendererFactory(tr));//决定图形怎么画的主要工具
// -- set up the actions ----------------------------------------------
int maxhops = 4, hops = 4;
final GraphDistanceFilter filter = new GraphDistanceFilter(graph, hops); ActionList draw = new ActionList();
draw.add(filter);
draw.add(new ColorAction(nodes, VisualItem.FILLCOLOR, ColorLib.rgb(200,200,255)));
draw.add(new ColorAction(nodes, VisualItem.STROKECOLOR, 0));
draw.add(new ColorAction(nodes, VisualItem.TEXTCOLOR, ColorLib.rgb(0,0,0)));
draw.add(new ColorAction(edges, VisualItem.FILLCOLOR, ColorLib.gray(200)));
draw.add(new ColorAction(edges, VisualItem.STROKECOLOR, ColorLib.gray(200)));
ColorAction fill = new ColorAction(nodes,
VisualItem.FILLCOLOR, ColorLib.rgb(200,200,255));
fill.add("_fixed", ColorLib.rgb(255,100,100));
fill.add("_highlight", ColorLib.rgb(255,200,125));
ForceDirectedLayout fdl = new ForceDirectedLayout(graph);
ForceSimulator fsim = fdl.getForceSimulator();
fsim.getForces()[0].setParameter(0, -1.2f);
ActionList animate = new ActionList(Activity.INFINITY);
animate.add(fdl);
animate.add(fill);
animate.add(new RepaintAction());
// finally, we register our ActionList with the Visualization.
// we can later execute our Actions by invoking a method on our
// Visualization, using the name we've chosen below.
vis.putAction("draw", draw);
vis.putAction("layout", animate);
vis.runAfter("draw", "layout");
// --------------------------------------------------------------------
// STEP 4: set up a display to show the visualization
//显示和交互控制
Display display = new Display(vis);//显示可视化数据
display.setSize(500,500);
display.setForeground(Color.GRAY);
display.setBackground(Color.WHITE);
// main display controls
display.addControlListener(new FocusControl(1));
display.addControlListener(new DragControl());
display.addControlListener(new PanControl());
display.addControlListener(new ZoomControl());
display.addControlListener(new WheelZoomControl());
display.addControlListener(new ZoomToFitControl());
display.addControlListener(new NeighborHighlightControl());
display.setForeground(Color.GRAY);
display.setBackground(Color.WHITE);
// --------------------------------------------------------------------
// STEP 5: launching the visualization
// create a panel for editing force values
final JForcePanel fpanel = new JForcePanel(fsim);
final JValueSlider slider = new JValueSlider("Distance", 0, maxhops, hops);
slider.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
filter.setDistance(slider.getValue().intValue());
vis.run("draw");
}
});
slider.setBackground(Color.WHITE);
slider.setPreferredSize(new Dimension(300,30));
slider.setMaximumSize(new Dimension(300,30));
Box cf = new Box(BoxLayout.Y_AXIS);
cf.add(slider);
cf.setBorder(BorderFactory.createTitledBorder("Connectivity Filter"));
fpanel.add(cf);
fpanel.add(Box.createVerticalGlue());
// create a new JSplitPane to present the interface
JSplitPane split = new JSplitPane();
split.setLeftComponent(display);
split.setRightComponent(fpanel);
split.setOneTouchExpandable(true);
split.setContinuousLayout(false);
split.setDividerLocation(530);
split.setDividerLocation(800);
// position and fix the default focus node
NodeItem focus = (NodeItem)vg.getNode(0);
PrefuseLib.setX(focus, null, 400);
PrefuseLib.setY(focus, null, 250);
focusGroup.setTuple(focus); // now we run our action list and return
return split;
}
} // end of class GraphView
这段代码。。 有一些地方看不懂。。 知道的朋友帮加下注释吧 还有就是。 我现在有一个xml文档。 里面有一些游离的节点。。在本例 的 图中是没有办法显示的 求教 如何让他可以显示?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货