posts - 59, comments - 244, trackbacks - 0, articles - 0
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          jbpm流程設(shè)計(jì)器開(kāi)發(fā)(1)

          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"); 
           }


          }



          http://www.aygfsteel.com/pengo

          待續(xù)。。。。。。。。。。。。

          詳細(xì)代碼可以自己看附件的代碼。

          源碼jgraphxflow.rar
          運(yùn)行程序jgraphxflow.jar.rar
           


          評(píng)論

          # re: jbpm流程設(shè)計(jì)器開(kāi)發(fā)(1)  回復(fù)  更多評(píng)論   

          2010-08-23 13:47 by cxh8318
          期待中

          # re: jbpm流程設(shè)計(jì)器開(kāi)發(fā)(1)  回復(fù)  更多評(píng)論   

          2013-05-02 19:23 by 劉聰
          你好,近期研究了一下你貼出來(lái)的相關(guān)程序,有些問(wèn)題,懇請(qǐng)指教,QQ:1054221627.
          主站蜘蛛池模板: 神池县| 新龙县| 阿合奇县| 定陶县| 和林格尔县| 肇庆市| 民县| 思茅市| 安义县| 杭锦旗| 高邑县| 西宁市| 万盛区| 岱山县| 昔阳县| 利川市| 奉节县| 台东县| 都匀市| 曲阜市| 南京市| 西华县| 庆阳市| 万安县| 陆川县| 车险| 丰顺县| 咸宁市| 老河口市| 鄂伦春自治旗| 武城县| 稻城县| 慈利县| 昌邑市| 庆阳市| 株洲市| 嘉定区| 嘉义市| 东源县| 桓台县| 寻甸|