Posted on 2010-08-22 23:22 
penngo 阅读(5119) 
评论(2)  编辑  收藏  所属分类: 
JBPM 
			 
			
		 
		    看了net博客介绍的不少wf流程设计器实现,也来介绍下java版的jbpm流程设计器来给大家看看。jbpm它本身也有基于eclipse插件和web版的流程设计器,不过一般我们使用jbpm开发时,都有很多自定义的东西,使用它自带的,会有一些不方便性,所以开发自定义的流程设计器,会有很多方便性。目前见过的用来开发流程设计器的组件有vml、svg、gef、jgraph,最近在javaeye上牛人介绍的Twave组件应该也适合用来开发。本篇将会介绍用jgraph来开发一个简单的jbpm4的流程设计器。jgraph官网:www.jgraph.com,目前有java版、javascript版、flash版,java版的jgraph是开源免费的,详细的介绍可以看官网。本文使用的JGraph版本是jgraphx 1.4.0.9(也叫jgraph6),它与jgraph5有很大的不同,实现类基本不同了。
    本篇先实现流程节点的插入,目前只实现开始节点的插入,后续的文章将会陆续介绍其它功能的完成。
GUI直接使用swing,目前只实现在鼠标单击时,插入一个节点,主要实现代码类:
GraphImpl.java代码
 package com.workflow.designer.view;
package com.workflow.designer.view;

 import java.awt.Point;
import java.awt.Point;
 import java.awt.event.MouseEvent;
import java.awt.event.MouseEvent;
 import java.awt.event.MouseListener;
import java.awt.event.MouseListener;
 import com.mxgraph.swing.mxGraphComponent;
import com.mxgraph.swing.mxGraphComponent;
 import com.mxgraph.view.mxGraph;
import com.mxgraph.view.mxGraph;
 import com.workflow.designer.model.Node;
import com.workflow.designer.model.Node;
 import com.workflow.designer.util.Logger;
import com.workflow.designer.util.Logger;


 public abstract class GraphImpl extends mxGraphComponent implements MouseListener
public abstract class GraphImpl extends mxGraphComponent implements MouseListener {
{
 //新建Jgraph面板,所有节点都绘制在该面板
 //新建Jgraph面板,所有节点都绘制在该面板
 private static mxGraph graph = new mxGraph();
 private static mxGraph graph = new mxGraph();

 public GraphImpl()
 public GraphImpl() {
{
 super(graph);
  super(graph);
 //给面板添加鼠标事件
  //给面板添加鼠标事件
 this.getGraphControl().addMouseListener(this);
  this.getGraphControl().addMouseListener(this);
 }
 }
 
 
 public abstract void inser(Point p, Node n);
 public abstract void inser(Point p, Node n);
 
 
 public abstract void mouseClicked(MouseEvent e);
 public abstract void mouseClicked(MouseEvent e);

 public abstract void mousePressed(MouseEvent e);
 public abstract void mousePressed(MouseEvent e);

 public abstract void mouseReleased(MouseEvent e);
 public abstract void mouseReleased(MouseEvent e);

 public abstract void mouseEntered(MouseEvent e);
 public abstract void mouseEntered(MouseEvent e);

 public abstract void mouseExited(MouseEvent e);
 public abstract void mouseExited(MouseEvent e);
 
 

 public mxGraph getGraph()
 public mxGraph getGraph()  {
{
 return graph;
  return graph;
 }
 }
 }
}


GraphView.java代码
 package com.workflow.designer.view;
package com.workflow.designer.view;

 import java.awt.Point;
import java.awt.Point;
 import java.awt.event.MouseEvent;
import java.awt.event.MouseEvent;
 import com.mxgraph.view.mxGraph;
import com.mxgraph.view.mxGraph;
 import com.workflow.designer.model.Node;
import com.workflow.designer.model.Node;
 import com.workflow.designer.util.Logger;
import com.workflow.designer.util.Logger;


 public class GraphView extends GraphImpl
public class GraphView extends GraphImpl {
{
 private mxGraph graph = this.getGraph();
 private mxGraph graph = this.getGraph();
 private Object parent = graph.getDefaultParent();
 private Object parent = graph.getDefaultParent();

 public GraphView()
  public GraphView() {
{
 
   
 }
  }


 public void inser(Point p, Node n)
  public void inser(Point p, Node n) {
{
 this.getGraph().getModel().beginUpdate();
   this.getGraph().getModel().beginUpdate();
 try
   try

 
    {
{
 //调用jgraph插入节点
    //调用jgraph插入节点
 Object v1 = graph.insertVertex(parent, null, n.getLabel(), p.getX() - 5, p.getY() - 5, n.getWidth(),
      Object v1 = graph.insertVertex(parent, null, n.getLabel(), p.getX() - 5, p.getY() - 5, n.getWidth(),
 n.getHeight(), n.getShape());
            n.getHeight(), n.getShape());
 }
   }
 finally
   finally

 
    {
{
 graph.getModel().endUpdate();
      graph.getModel().endUpdate();
 }
   }
 }
  }
 
  

 public void mouseClicked(MouseEvent e)
  public void mouseClicked(MouseEvent e) {
{
 Point p = e.getPoint();
   Point p = e.getPoint();
 //鼠标点击时,在jgraph面板上插入节点
   //鼠标点击时,在jgraph面板上插入节点
 inser(p, new Node("开始", "start", "shape=ellipse;perimeter=ellipsePerimeter;"));
   inser(p, new Node("开始", "start", "shape=ellipse;perimeter=ellipsePerimeter;"));
 Logger.debug("mouseClicked");
   Logger.debug("mouseClicked");
 }
  }


 public void mousePressed(MouseEvent e)
 public void mousePressed(MouseEvent e) {
{
 Logger.debug("mousePressed");
  Logger.debug("mousePressed");
 }
 }


 public void mouseReleased(MouseEvent e)
 public void mouseReleased(MouseEvent e) {
{
 Logger.debug("mouseReleased");
  Logger.debug("mouseReleased");
 }
 }


 public void mouseEntered(MouseEvent e)
 public void mouseEntered(MouseEvent e) {
{
 Logger.debug("mouseEntered");
  Logger.debug("mouseEntered");
 }
 }


 public void mouseExited(MouseEvent e)
 public void mouseExited(MouseEvent e) {
{
 Logger.debug("mouseExited");
  Logger.debug("mouseExited"); 
 }
 }

 }
}



待续。。。。。。。。。。。。
详细代码可以自己看附件的代码。
源码jgraphxflow.rar
运行程序jgraphxflow.jar.rar