我想在一个简单的x,y
图表上绘制线条以使用JGraphT在JApplet中显示。我发现的例子不是很有帮助。有人可以指点我几个简单的JGraphT示例吗?
问问题
22413 次
2 回答
6
这是一个我希望对jgrapht有所帮助的例子
于 2012-08-17T12:49:36.493 回答
4
package simple;
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
import org.jgraph.JGraph;
import org.jgraph.graph.AttributeMap;
import org.jgraph.graph.DefaultGraphCell;
import org.jgraph.graph.GraphConstants;
import org.jgrapht.*;
import org.jgrapht.ext.*;
import org.jgrapht.graph.*;
// resolve ambiguity
import org.jgrapht.graph.DefaultEdge;
import com.compilervision.common.CFNode;
import com.compilervision.common.llvmir.instructions.CFG;
import com.compilervision.common.Edge;
/**
* A demo applet that shows how to use JGraph to visualize JGraphT graphs.
*
* @author Barak Naveh
* @since Aug 3, 2003
*/
public class Test
extends JApplet
{
//~ Static fields/initializers ---------------------------------------------
private static final long serialVersionUID = 3256444702936019250L;
private static final Color DEFAULT_BG_COLOR = Color.decode("#FAFBFF");
private static final Dimension DEFAULT_SIZE = new Dimension(530, 320);
//~ Instance fields --------------------------------------------------------
//
private JGraphModelAdapter<CFNode, Edge> jgAdapter;
//~ Methods ----------------------------------------------------------------
/**
* An alternative starting point for this demo, to also allow running this
* applet as an application.
*
* @param args ignored.
*/
public static void main(String [] args)
{
Test applet = new Test();
applet.init();
JFrame frame = new JFrame();
frame.getContentPane().add(applet);
frame.setTitle("JGraphT Adapter to JGraph Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
/**
* {@inheritDoc}
*/
public void init()
{
// create a JGraphT graphq
ListenableGraph<CFNode, Edge> g =
new ListenableDirectedMultigraph<CFNode, Edge>(
Edge.class);
// create a visualization using JGraph, via an adapter
jgAdapter = new JGraphModelAdapter<CFNode,Edge>(g);
JGraph jgraph = new JGraph(jgAdapter);
adjustDisplaySettings(jgraph);
getContentPane().add(jgraph);
resize(DEFAULT_SIZE);
String v1 = "v1";
String v2 = "v2";
String v3 = "v3";
String v4 = "v4";
// add some sample data (graph manipulated via JGraphT)
g.addVertex(v1);
g.addVertex(v2);
g.addVertex(v3);
g.addVertex(v4);
g.addEdge(v1, v2);
g.addEdge(v2, v3);
g.addEdge(v3, v1);
g.addEdge(v4, v3);
// position vertices nicely within JGraph component
//GraphSimpleLayout()
positionVertexAt(v1, 130, 140);
positionVertexAt(v2, 60, 200);
positionVertexAt(v3, 310, 230);
positionVertexAt(v4, 380, 70);
// that's all there is to it!...
}
private void adjustDisplaySettings(JGraph jg)
{
jg.setPreferredSize(DEFAULT_SIZE);
Color c = DEFAULT_BG_COLOR;
String colorStr = null;
try {
colorStr = getParameter("bgcolor");
} catch (Exception e) {
}
if (colorStr != null) {
c = Color.decode(colorStr);
}
jg.setBackground(c);
}
@SuppressWarnings("unchecked") // FIXME hb 28-nov-05: See FIXME below
private void positionVertexAt(Object vertex, int x, int y)
{
DefaultGraphCell cell = jgAdapter.getVertexCell(vertex);
AttributeMap attr = cell.getAttributes();
Rectangle2D bounds = GraphConstants.getBounds(attr);
Rectangle2D newBounds = new Rectangle2D.Double(x,y,bounds.getWidth(),bounds.getHeight());
GraphConstants.setBounds(attr, newBounds);
// TODO: Clean up generics once JGraph goes generic
org.jgraph.graph.AttributeMap cellAttr = new AttributeMap();
cellAttr.put(cell, attr);
jgAdapter.edit(cellAttr, null, null, null);
}
//~ Inner Classes ----------------------------------------------------------
/**
* a listenable directed multigraph that allows loops and parallel edges.
*/
private static class ListenableDirectedMultigraph<V, E>
extends DefaultListenableGraph<V, E>
implements DirectedGraph<V, E>
{
private static final long serialVersionUID = 1L;
ListenableDirectedMultigraph(Class<E> edgeClass)
{
super(new DirectedMultigraph<V, E>(edgeClass));
}
}
}
// End JGraphAdapterDemo.java
于 2013-02-27T07:49:13.400 回答