JFrame中的JGraph

我想绘制一些图形,包括我的应用程序中的顶点和边。 我发现JGraph是一个用于绘制图形的好库。 我浏览了一些有关它的在线资料,但找不到任何有关如何在Swing应用程序中嵌入JGraph的相关文章。 (在JFrame显示JGraph等)。 任何人都可以帮助我吗?

这段代码对我有用:

 // Insert the cells via the cache, so they get selected graph.getGraphLayoutCache().insert(cells); // Show in Frame JFrame frame = new JFrame(); frame.getContentPane().add(new JScrollPane(graph)); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); 

如果你想要整个样本,我也可以上传它。

我认为代码必须是来自网站的修改样本。 干得好:

 import java.awt.Color; import java.awt.geom.Rectangle2D; import javax.swing.BorderFactory; import javax.swing.JFrame; import javax.swing.JScrollPane; import org.jgraph.JGraph; import org.jgraph.graph.DefaultEdge; import org.jgraph.graph.DefaultGraphCell; import org.jgraph.graph.DefaultGraphModel; import org.jgraph.graph.GraphConstants; import org.jgraph.graph.GraphModel; public class Foo { public static void main(String[] args) { // Construct Model and Graph GraphModel model = new DefaultGraphModel(); JGraph graph = new JGraph(model); // Control-drag should clone selection graph.setCloneable(true); // Enable edit without final RETURN keystroke graph.setInvokesStopCellEditing(true); // When over a cell, jump to its default port (we only have one, anyway) graph.setJumpToDefaultPort(true); // Insert all three cells in one call, so we need an array to store them DefaultGraphCell[] cells = new DefaultGraphCell[3]; // Create Hello Vertex cells[0] = createVertex("Hello", 20, 20, 40, 20, null, false ); // Create World Vertex cells[1] = createVertex("World", 140, 140, 40, 20, Color.ORANGE, true); // Create Edge DefaultEdge edge = new DefaultEdge("foo"); // Fetch the ports from the new vertices, and connect them with the edge edge.setSource(cells[0].getChildAt(0)); edge.setTarget(cells[0].getChildAt(0)); cells[2] = edge; // Create Edge DefaultEdge edge1 = new DefaultEdge(); // Fetch the ports from the new vertices, and connect them with the edge // cells[0].addPort(); // cells[1].addPort(); // edge1.setSource(cells[1]); // edge1.setTarget(cells[0]); // cells[3] = edge1; // Set Arrow Style for edge int arrow = GraphConstants.ARROW_CLASSIC; GraphConstants.setLineEnd(edge.getAttributes(), arrow); GraphConstants.setEndFill(edge.getAttributes(), true); // Insert the cells via the cache, so they get selected graph.getGraphLayoutCache().insert(cells); // Show in Frame JFrame frame = new JFrame(); frame.getContentPane().add(new JScrollPane(graph)); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); } public static DefaultGraphCell createVertex(String name, double x, double y, double w, double h, Color bg, boolean raised) { // Create vertex with the given name DefaultGraphCell cell = new DefaultGraphCell(name); // Set bounds GraphConstants.setBounds(cell.getAttributes(), new Rectangle2D.Double(x, y, w, h)); // Set fill color if (bg != null) { GraphConstants.setGradientColor(cell.getAttributes(), bg); GraphConstants.setOpaque(cell.getAttributes(), true); } // Set raised border if (raised) { GraphConstants.setBorder(cell.getAttributes(), BorderFactory.createRaisedBevelBorder()); } else // Set black border { GraphConstants.setBorderColor(cell.getAttributes(), Color.black); } // Add a Floating Port cell.addPort(); return cell; } } 

这是一个非常简单的例子。 我已经做了一些复杂的数据库数据图,但最终与Jung2合作 ,更符合我的需求。

JGraph包含examples文件夹中的com.mxgraph.examples.swingcom.mxgraph.examples.swing.editor包:

 $ ls examples / com / mxgraph / examples / swing
 ClickHandler.java GraphEditor.java SchemaEditor.java编辑器
 CustomCanvas.java HelloWorld.java UserObject.java图像
 FixedPoints.java Port.java Validation.java资源

 $ ls examples / com / mxgraph / examples / swing / editor
 BasicGraphEditor.java EditorMenuBar.java JTableRenderer.java
 DefaultFileFilter.java EditorPalette.java SchemaEditorMenuBar.java
 EditorAboutFrame.java EditorPopupMenu.java SchemaEditorToolBar.java
 EditorActions.java EditorRuler.java SchemaGraphComponent.java
 EditorKeyboardHandler.java EditorToolBar.java ShadowBorder.java

也许你正在寻找的是G。