<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 59, comments - 244, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    jbpm流程設計器開發(2)

    Posted on 2010-08-25 15:24 penngo 閱讀(4255) 評論(1)  編輯  收藏 所屬分類: JBPM
    jbpm流程設計器開發(1)

    本篇主要實現了多個流程節點的繪制。

    部分功能代碼
    FlowNode.xml主要配置流程節點的屬性。

    <?xml version="1.0" encoding="GBK" standalone="yes"?>
    <flowNode>
        
    <node height="40" width="40" type="straight" shape="shape=ellipse;perimeter=ellipsePerimeter;" 

    icon
    ="images/straight.gif" label="直線"/>
        
    <node height="40" width="40" type="start" shape="shape=ellipse;perimeter=ellipsePerimeter;" icon="images/start.gif" 

    label
    ="開始"/>
        
    <node height="40" width="40" type="end" shape="shape=doubleEllipse;perimeter=ellipsePerimeter;" icon="images/end.gif" 

    label
    ="結束"/>
        
    <node height="40" width="80" type="state" shape="rounded=1;" icon="images/state.gif" label="狀態"/>
        
    <node height="40" width="80" type="task" shape="rounded=1;" icon="images/task.gif" label="任務"/>
        
    <node height="40" width="40" type="decision" shape="shape=rhombus;perimeter=rhombusPerimeter;" 

    icon
    ="images/decision.gif" label="判斷"/>
        
    <node height="40" width="40" type="fork" shape="shape=rhombus;perimeter=rhombusPerimeter;" icon="images/fork.gif" 

    label
    ="分支"/>
        
    <node height="40" width="40" type="join" shape="shape=rhombus;perimeter=rhombusPerimeter;" icon="images/join.gif" 

    label
    ="合并"/>
    </flowNode>

    LeftPanel.java主要顯示流程節點列表
    package com.workflow.designer.view;
    import java.awt.Color;
    import java.awt.Component;
    import java.awt.Desktop;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.io.File;

    import javax.swing.DefaultListModel;
    import javax.swing.Icon;
    import javax.swing.ImageIcon;
    import javax.swing.JLabel;
    import javax.swing.JList;
    import javax.swing.JPanel;
    import javax.swing.ListCellRenderer;
    import javax.swing.filechooser.FileSystemView;
    import javax.xml.bind.JAXBContext;
    import javax.xml.bind.Unmarshaller;

    import com.mxgraph.view.mxGraph;
    import com.workflow.designer.model.FlowNode;
    import com.workflow.designer.model.Node;
    import com.workflow.designer.util.Logger;

    public class LeftPanel extends JList{
        
    //private JList list = null;
        private GraphImpl graph = null;
        
    private DefaultListModel listModel = null;
        
    public LeftPanel(){
            init();
        }

        
        
    public DefaultListModel getListModel() {
            
    return listModel;
        }


        
    public void setListModel(DefaultListModel listModel) {
            
    this.listModel = listModel;
        }


        
    private void init() {
            listModel 
    = new DefaultListModel();
            
            
    try{
                
    //JList數據初始化
            JAXBContext jc = JAXBContext.newInstance("com.workflow.designer.model");
            Unmarshaller u 
    = jc.createUnmarshaller();
            FlowNode fn 
    = (FlowNode) u
            .unmarshal(FlowNode.
    class.getClassLoader().getResourceAsStream("com/workflow/designer/model/FlowNode.xml"));
            
    for(Node n:fn.getNode()){
                listModel.addElement(n);
            }

            }

            
    catch(Exception e){
                e.printStackTrace();
            }

            
    this.setModel(listModel);
            
    this.setCellRenderer(new MyCellRenderer());
            
    this.addMouseListener(new MouseAdapter() {
                
    public void mouseClicked(MouseEvent e) {
                    
    super.mouseClicked(e);
                }

            
                
    public void mousePressed(MouseEvent e) {

                    
    super.mousePressed(e);
                }

            }
    );
        
        }

        
        
    class MyCellRenderer extends JLabel implements ListCellRenderer {
            
    public Component getListCellRendererComponent(JList list, 
                    Object value, 
                    
    int index, 
                    
    boolean isSelected, 
                    
    boolean cellHasFocus) 
            
    {
                
    if (value instanceof Node) {
                    Node n 
    = (Node) value;
                    Icon icon 
    = new ImageIcon(getClass().getClassLoader().getResource(n.getIcon()));
                    setIcon(icon);
                }

                String s 
    = value.toString();
                setText(s);
                
    this.setToolTipText(s);
                
                
    if (isSelected) {
                    setBackground(list.getSelectionBackground());
                    setForeground(list.getSelectionForeground());
                }
     else {
                    setBackground(Color.WHITE);
                    setForeground(list.getForeground());
                }

                
                setEnabled(list.isEnabled());
                setOpaque(
    true);
                
    return this;
            }

        }

        
        
    public void setGraph(GraphImpl gi) {
            
    this.graph = gi;
        }

        
        
    public static void main(String arg[]) {
            
    new LeftPanel();
        }

    }

    GraphView.java獲取LeftPanel中被選中的節點,并在面板上繪制該節點
    package com.workflow.designer.view;

    import java.awt.Point;
    import java.awt.event.MouseEvent;

    import com.mxgraph.model.mxCell;
    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();
        
    private LeftPanel lp = null;
         
    public GraphView(LeftPanel lp){
             
    this.lp = lp;
         }


         
    public void inser(Point p, Node n){
             
    this.getGraph().getModel().beginUpdate();
                
    try
                
    {
                    
    //調用jgraph插入節點
                   Object v1 = graph.insertVertex(parent, null, n.getLabel(), p.getX() - 5, p.getY() - 5

    n.getWidth(),
                         n.getHeight(), n.getShape());
                   ((mxCell)v1).setConnectable(
    false);
                }

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

         }

         
         
    public void mouseClicked(MouseEvent e){
            
    //獲取被選中節點
             Object obj = lp.getSelectedValue();
             
    if(obj instanceof Node){
                 Node n 
    = (Node)obj;
                 Point p 
    = e.getPoint();
                 
    if(!n.getType().equals("straight")){
                    
    //鼠標點擊時,在jgraph面板上插入節點
                     inser(p, n);
                     lp.clearSelection();
                 }

             }

         }


        
    public void mousePressed(MouseEvent e){
            
        }


        
    public void mouseReleased(MouseEvent e){
            
        }


        
    public void mouseEntered(MouseEvent e){
            
    //只有在線條節點被選中時,才能繪制連接線
            Object obj = lp.getSelectedValue();
             
    if(obj instanceof Node){
                 Node n 
    = (Node)obj;
                 Object parent 
    = graph.getDefaultParent();
                 Object childs[] 
    = graph.getChildCells(parent);
                 
    if(n.getType().equals("straight")){
                    
    for(Object cell:childs){
                        ((mxCell)cell).setConnectable(
    true); //設置可連線
                    }

                 }

                 
    else{
                     
    for(Object cell:childs){
                        ((mxCell)cell).setConnectable(
    false);
                    }

                 }

            }

        }


        
    public void mouseExited(MouseEvent e){
        }

    }


    繪制的流程圖


    現在已經基本實現流程的繪制了,下一篇將會介紹流程定義文件保存打開。
    源碼:源碼
    打包jar:jgraphxflow.jar


    評論

    # re: jbpm流程設計器開發(2)  回復  更多評論   

    2010-08-25 18:06 by pengo
    忘記說,附件的jar都是JDK1.6編譯的。還未具體研究過jbpm4.4的流程定義文件,下一篇還要過比較久才能寫得出來。
    主站蜘蛛池模板: 中文字幕亚洲综合久久综合| 成年网站免费视频A在线双飞| 亚洲日韩中文字幕一区| 久久综合日韩亚洲精品色| 免费人成视频在线观看视频| 国产乱码免费卡1卡二卡3卡| 一级毛片免费观看| 中文字幕乱码系列免费| 久久www免费人成看片| 国产精品极品美女自在线观看免费 | 久久免费看黄a级毛片 | 亚洲熟妇av一区二区三区 | 久久免费视频一区| 免费看黄网站在线看| 亚洲精品无码专区在线播放| 亚洲成a人片在线网站| 亚洲另类激情综合偷自拍| 亚洲精品少妇30p| 亚洲日产韩国一二三四区| 亚洲精品A在线观看| 免费大片黄手机在线观看| 国产免费怕怕免费视频观看| 免费视频中文字幕| 午夜男人一级毛片免费 | 亚洲国产成人精品无码区花野真一 | 亚洲ts人妖网站| 亚洲色偷偷偷网站色偷一区| 亚洲成人中文字幕| 亚洲AV无码专区在线播放中文| 亚洲最大AV网站在线观看| 国产精品亚洲mnbav网站 | 亚洲国产精品一区二区第一页| 亚洲精品色午夜无码专区日韩| 亚洲中文字幕无码久久精品1 | 国产精品亚洲lv粉色| 欧美亚洲国产SUV| 国产亚洲女在线线精品| 最好2018中文免费视频| 一级做a免费视频观看网站| 一级毛片人与动免费观看| 男女一边桶一边摸一边脱视频免费 |