`

JGraph 画出你想要的图形

 
阅读更多

最近在学着使用开源的JGraph,为了能添加一个自己的cell,看了一堆帖子。这些帖子有一个特点,千篇一律,你转我的,我转你的,感觉太没意思了吧,始终只能画出锥形。后来还是直接搜索英文的了,搜到了The JGraph Tutorial。其中给了一个很好的例子,我略作了一些修改,功能是添加了一个自己的EllipseCell,画出了椭圆或者圆,这个取决于代码中的GraphConstants.setBounds(cells[1].getAttributes(),

new Rectangle2D.Double(140,140,40,20))。(代码中没有进行注释,想进一步了解的可以下载英

文手册进行学习,这里给出一个我上传的网址 http://download.csdn.net/source/2742630同时记得下载jar包,否则无法运行

 

 JGtest.java文件内容如下:

   

Java代码   收藏代码
  1. import java.awt.Color;  
Java代码   收藏代码
  1. import java.awt.GradientPaint;  
  2. import java.awt.Graphics;  
  3. import java.awt.Graphics2D;  
  4. import java.awt.Point;  
  5. import java.awt.geom.Point2D;  
  6. import java.awt.geom.Rectangle2D;  
  7. import javax.swing.JFrame;  
  8. import javax.swing.JScrollPane;  
  9. import org.jgraph.JGraph;  
  10. import org.jgraph.graph.CellViewRenderer;  
  11. import org.jgraph.graph.DefaultCellViewFactory;  
  12. import org.jgraph.graph.DefaultEdge;  
  13. import org.jgraph.graph.DefaultGraphCell;  
  14. import org.jgraph.graph.DefaultGraphModel;  
  15. import org.jgraph.graph.DefaultPort;  
  16. import org.jgraph.graph.EdgeView;  
  17. import org.jgraph.graph.GraphConstants;  
  18. import org.jgraph.graph.GraphLayoutCache;  
  19. import org.jgraph.graph.GraphModel;  
  20. import org.jgraph.graph.VertexRenderer;  
  21. import org.jgraph.graph.VertexView;  
  22.   
  23. public class JGtest {  
  24.     public static void main(String[] args)  
  25.       {  
  26.         GraphModel model = new DefaultGraphModel();  
  27.         GraphLayoutCache view = new GraphLayoutCache(model, new MyView());  
  28.         JGraph graph = new JGraph(model, view);  
  29.           
  30.         DefaultGraphCell[] cells = new DefaultGraphCell[3];  
  31.             cells[0] = new EllipseCell(new String("Hello New"));  
  32.         //GraphConstants.setAutoSize(cells[0].getAttributes(), true);  
  33.         GraphConstants.setBounds(cells[0].getAttributes(), new Rectangle2D.Double(140,20,50,50));  
  34.         GraphConstants.setGradientColor(cells[0].getAttributes(),Color.black);  
  35.         GraphConstants.setOpaque(cells[0].getAttributes(), true);  
  36.          
  37.         DefaultPort port0 = new DefaultPort();  
  38.          cells[0].add(port0);  
  39.              cells[1] = new DefaultGraphCell(new String("World"));  
  40.         GraphConstants.setBounds(cells[1].getAttributes(), new Rectangle2D.Double(140,140,40,20));  
  41.         GraphConstants.setGradientColor(cells[1].getAttributes(),Color.red);  
  42.         GraphConstants.setOpaque(cells[1].getAttributes(), true);  
  43.         DefaultPort port1 = new DefaultPort();  
  44.         cells[1].add(port1);  
  45.               
  46.         DefaultEdge edge = new DefaultEdge();  
  47.         edge.setSource(cells[0].getChildAt(0));  
  48.         edge.setTarget(cells[1].getChildAt(0));  
  49.         cells[2] = edge;  
  50.         int arrow = GraphConstants.ARROW_CLASSIC;  
  51.         GraphConstants.setLineEnd(edge.getAttributes(), arrow);  
  52.         GraphConstants.setEndFill(edge.getAttributes(), true);  
  53.          graph.getGraphLayoutCache().insert(cells);  
  54.   
  55.            JFrame frame = new JFrame();  
  56.         frame.setSize(1000500);  
  57.         frame.setTitle("Activity Diagram");  
  58.         frame.getContentPane().add(new JScrollPane(graph));  
  59.           
  60.          frame.setBounds(5050700800);  
  61.           
  62.          frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);  
  63.          frame.setVisible(true);  
  64.           
  65.         }  
  66.   
  67. }  
  68.   
  69.            

 

  EllipseCell.java文件内容:

 

 

Java代码   收藏代码
  1. import java.awt.GradientPaint;  
  2. import java.awt.Graphics;  
  3. import java.awt.Graphics2D;  
  4. import java.awt.geom.Point2D;  
  5.   
  6. import org.jgraph.graph.CellViewRenderer;  
  7. import org.jgraph.graph.DefaultCellViewFactory;  
  8. import org.jgraph.graph.DefaultGraphCell;  
  9. import org.jgraph.graph.EdgeView;  
  10. import org.jgraph.graph.VertexRenderer;  
  11. import org.jgraph.graph.VertexView;  
  12.   
  13.   
  14.   
  15. //Define EllipseCell  
  16. public class EllipseCell extends DefaultGraphCell {  
  17.   // Empty Constructor  
  18.     public EllipseCell() {  
  19.       this(null);  
  20.     }  
  21.   // Construct Cell for Userobject  
  22.     public EllipseCell(Object userObject) {  
  23.     super(userObject);  
  24.      }  
  25. }  
  26.   
  27. //Define the View for an EllipseCell  
  28. class EllipseView extends VertexView {  
  29.    
  30.    static EllipseRenderer renderer = new EllipseRenderer();  
  31.  // Constructor for Superclass  
  32.    public EllipseView(Object cell) {  
  33.    super(cell);  
  34.  }  
  35.  // Returns Perimeter Point for Ellipses  
  36.    public Point2D getPerimeterPoint(EdgeView edge, Point2D source, Point2D p) {  
  37.         if (getRenderer() instanceof EllipseRenderer)  
  38.             return ((EllipseRenderer) getRenderer()).getPerimeterPoint(this,  
  39.                     source, p);  
  40.         return super.getPerimeterPoint(edge, source, p);  
  41.     }  
  42.    
  43.  // Returns the Renderer for this View  
  44.    public CellViewRenderer getRenderer() {  
  45.    return renderer;  
  46.  }  
  47.  // Define the Renderer for an EllipseView  
  48.    static class EllipseRenderer extends VertexRenderer {  
  49.     public void paint(Graphics g) {   
  50.        
  51.        try {  
  52.             if (gradientColor != null && !preview && isOpaque()) {  
  53.                 setOpaque(false);  
  54.                 Graphics2D g2d = (Graphics2D) g;  
  55.                  g2d.setPaint(new GradientPaint(00, getBackground(),  
  56.                         getWidth(), getHeight(), gradientColor, true));  
  57.                  g2d.drawOval(00, getWidth(), getHeight());      
  58.                  g2d.fillOval(00, getWidth(), getHeight());  
  59.                    
  60.                  //System.out.println(getWidth()+" "+getHeight());  
  61.                 //g2d.fillRect(0, 0, getWidth(), getHeight());  
  62.             }  
  63.             super.paint(g);  
  64.             paintSelectionBorder(g);  
  65.         } catch (IllegalArgumentException e) {  
  66.             // JDK Bug: Zero length string passed to TextLayout constructor  
  67.         }  
  68.    }  
  69.  }  
  70. }  
  71.   
  72.   
  73. class MyView extends DefaultCellViewFactory  
  74. {  
  75. //  Overrides JGraph.createVertexView  
  76.     protected VertexView createVertexView(Object v) {  
  77.       // Return an EllipseView for EllipseCells  
  78.       if (v instanceof EllipseCell)  
  79.         return new EllipseView(v);  
  80.       else if(v instanceof DiamondCell)  
  81.           return new DiamondView(v);  
  82.       // Else Call Superclass  
  83.       return super.createVertexView(v);  
  84.     }  
  85. }  

 

由于本人水平有限,目前对这个jar包还在研究中,功能很强大,呵呵。

 

 

http://xdgj.iteye.com/blog/780218

分享到:
评论

相关推荐

    使用MATLAB画精美图代码大全-pyviz:python可视化技巧

    使用MATLAB画精美的图代码大全注解 Graph Viz工具:Gephi,Cytoscape,NodeXL,GraphViz,美人鱼,networkX,igraph,Jgraph Semyon Sinchenko: Если для целей "просто посмотреть", ...

    JAVA上百实例源码以及开源项目

    1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件,FTP的目标是:(1)提高...

    JAVA上百实例源码以及开源项目源代码

    EJB中JNDI的使用源码例子 1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件...

    java开源包1

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

    java开源包11

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

    java开源包2

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

    java开源包3

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

    java开源包6

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

    java开源包5

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

    java开源包10

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

    java开源包4

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

    java开源包8

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

    java开源包7

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

    java开源包9

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

    java开源包101

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

    Java资源包01

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

Global site tag (gtag.js) - Google Analytics