Posted on 2010-08-22 23:22
penngo 閱讀(5103)
評(píng)論(2) 編輯 收藏 所屬分類(lèi):
JBPM
看了net博客介紹的不少wf流程設(shè)計(jì)器實(shí)現(xiàn),也來(lái)介紹下java版的jbpm流程設(shè)計(jì)器來(lái)給大家看看。jbpm它本身也有基于eclipse插件和web版的流程設(shè)計(jì)器,不過(guò)一般我們使用jbpm開(kāi)發(fā)時(shí),都有很多自定義的東西,使用它自帶的,會(huì)有一些不方便性,所以開(kāi)發(fā)自定義的流程設(shè)計(jì)器,會(huì)有很多方便性。目前見(jiàn)過(guò)的用來(lái)開(kāi)發(fā)流程設(shè)計(jì)器的組件有vml、svg、gef、jgraph,最近在javaeye上牛人介紹的Twave組件應(yīng)該也適合用來(lái)開(kāi)發(fā)。本篇將會(huì)介紹用jgraph來(lái)開(kāi)發(fā)一個(gè)簡(jiǎn)單的jbpm4的流程設(shè)計(jì)器。jgraph官網(wǎng):www.jgraph.com,目前有java版、javascript版、flash版,java版的jgraph是開(kāi)源免費(fèi)的,詳細(xì)的介紹可以看官網(wǎng)。本文使用的JGraph版本是jgraphx 1.4.0.9(也叫jgraph6),它與jgraph5有很大的不同,實(shí)現(xiàn)類(lèi)基本不同了。
本篇先實(shí)現(xiàn)流程節(jié)點(diǎn)的插入,目前只實(shí)現(xiàn)開(kāi)始節(jié)點(diǎn)的插入,后續(xù)的文章將會(huì)陸續(xù)介紹其它功能的完成。
GUI直接使用swing,目前只實(shí)現(xiàn)在鼠標(biāo)單擊時(shí),插入一個(gè)節(jié)點(diǎn),主要實(shí)現(xiàn)代碼類(lèi):
GraphImpl.java代碼
package com.workflow.designer.view;

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


public abstract class GraphImpl extends mxGraphComponent implements MouseListener
{
//新建Jgraph面板,所有節(jié)點(diǎn)都繪制在該面板
private static mxGraph graph = new mxGraph();

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

public abstract void mousePressed(MouseEvent e);

public abstract void mouseReleased(MouseEvent e);

public abstract void mouseEntered(MouseEvent e);

public abstract void mouseExited(MouseEvent e);

public mxGraph getGraph()
{
return graph;
}
}


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

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


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

public GraphView()
{
}


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

{
//調(diào)用jgraph插入節(jié)點(diǎn)
Object v1 = graph.insertVertex(parent, null, n.getLabel(), p.getX() - 5, p.getY() - 5, n.getWidth(),
n.getHeight(), n.getShape());
}
finally

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

public void mouseClicked(MouseEvent e)
{
Point p = e.getPoint();
//鼠標(biāo)點(diǎn)擊時(shí),在jgraph面板上插入節(jié)點(diǎn)
inser(p, new Node("開(kāi)始", "start", "shape=ellipse;perimeter=ellipsePerimeter;"));
Logger.debug("mouseClicked");
}


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


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


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


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

}



待續(xù)。。。。。。。。。。。。
詳細(xì)代碼可以自己看附件的代碼。
源碼jgraphxflow.rar
運(yùn)行程序jgraphxflow.jar.rar