工作流图形化流程定义编程 - zhanglguo的专栏 - CSDNBlog

来源:百度文库 编辑:神马文学网 时间:2024/06/12 18:51:30
 工作流图形化流程定义编程
大多采用jgraph组件。
此文介绍另外一种最基本的思路,下列所有项尽可能按照细致的功能点和实现思路划分:
..
(1)以JPanel的子类实例作为绘画面板,并将绘画面板放到JScrollPane中(可以滚动的面板);
(2)所有绘画面板的操作(包括第一次初始化,最小化/最大化,鼠标/键盘操作)均调用JPanel的paint(Graphics g)方法;所以会在paint方法中重绘所有的节点,连接弧和折点,来表现鼠标操作等等操作变化.需要  super.paint(g);的调用.
(3)在paint()方法中需要调用FontMetrics fm = graphics.getFontMetrics();所有与表达字体的因素和此值有关.
(4)和图形化相关的需要保存到永久存储器的元素:节点/连接弧/折点的坐标.折点的存在最主要为了表达节点自循环的连接弧,更有利于复杂节点间的连接弧.坐标在绘制操作中应暂时保存到内存中,只有用户最终保存时,才保存到永久存储器中(XML或数据库),应该有一个流程对象管理节点/连接弧/折点.
(5)按照节点的坐标,连接弧的开始/结束坐标调用Graphics 的drawImage()/drawLine()等绘制图形元素.
(6)设置绘制面板的类成员变量,表达当前用户选择的图形元素,在绘制图形元素的时候碰到选择的图形元素给予突出显示,同时反映到额外的属性面板或等待弹出的面板.
(7)使绘制面板实现MouseListener, MouseMotionListener接口,如若想响应键盘事件,则实现KeyListener接口.
(8)mousePressed(MouseEvente)的响应事件主要反映用户选择了何种元素,并将他设置到第6项的类成员变量中.选择的标准是鼠标点击的区域是否在(节点X坐标,节点Y坐标),(节点X坐标,节点Y坐标+节点图形高度),(节点X坐标+节点图形宽度,节点Y坐标),(节点X坐标+节点图形宽度,节点Y坐标+节点图形高度)所围成的区域内.通过MounseEvent的getX(),getY()获取当前点击的坐标.方法最后调用 repaint().
(9)mouseEntered(MouseEvent e) &&mouseExited(MouseEvent e) 可以暂时不具体实现;
(10)mouseDragged(MouseEvente)中判断根据第6项和第8项的当前选择元素是否为空,如果不为空,则设置当前选择元素的坐标选择值,方法最后调用  repaint();和updateUI();为了考虑人性化,在拖动时,应把鼠标图形设置为移动状态this.setCursor(newCursor(Cursor.MOVE_CURSOR)),但在其他鼠标事件中,注释释放鼠标状态到合理状态.
(11)mouseReleased(MouseEvent e)中,首先设置鼠标为正常状态,setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
在另外的面板中(选择增加何种元素的面板),如果选择了绘制一种新元素,则调用流程增加节点/连接弧/折点的方法.
(12)mouseMoved(MouseEvent e)方法,主要判断是否进入了某个图形区域,并将鼠标变为手形setCursor(new Cursor(Cursor.HAND_CURSOR));没有进入某图形区域的处理:
如果在另外的面板中(选择增加何种元素的面板)有选择,应该把鼠标变为提示用户可以增加的形状,如setCursor(newCursor(Cursor.CROSSHAIR_CURSOR));如果什么事也没有,应setCursor(newCursor(Cursor.DEFAULT_CURSOR));
(13)在鼠标事件的时候最后别忘了repaint()等重绘面板方法;
(14)执行删除操作,应该参照第8项判断选择了何种元素.
工作流图形化流程定义编程 - zhanglguo的专栏 - CSDNBlog 工作流模式详解之流程控制模式(5)——Simple Merge - 俠盜躶奔漢的专栏 - CSDNBlog 工作流模式详解之流程控制模式(4)——Exclusive Choice - 俠盜躶奔漢的专栏 - CSDNBlog 工作流模式详解之流程控制模式(5)——Simple Merge - 俠盜躶奔漢的专栏 - CSDNBlog JavaScript图形库 - 潘磊的专栏 - CSDNBlog 网络编程之setsockopt - hurtmanzc的专栏 - CSDNBlog Posix线程编程指南 - lne818的专栏 - CSDNBlog MFC 对话框编程要点 - lesky的专栏 - CSDNBlog Posix线程编程指南 - lne818的专栏 - CSDNBlog 工作流系列之可自管理的分布式工作流引擎的设计与实现 - 雪狐狸的专栏 - CSDNBlog JM模型I帧帧内预测流程 - huzia的专栏 - CSDNBlog 关于在集群中编程的问题 - mrdangdong的专栏 - CSDNBlog 深入剖析Java编程中的中文问题及建议最优解决方法 - mayabuluo的专栏 - CSDNBlog WinSock网络编程实用宝典 - manplus(魅力加加)的专栏 - CSDNBlog 正则表达式在网络编程中的运用 - ipeak的专栏 - CSDNBlog Unix编程/应用问答中文版(转) - lovechen508的专栏 - CSDNBlog 英特尔多核平台编程优化大赛报告 - flyingdog的专栏 - CSDNBlog 英特尔多核平台编程优化大赛报告 - flyingdog的专栏 - CSDNBlog C armman的专栏 - CSDNBlog 工作流:形参,实参,相关数据 - 切尔斯基的工作 - CSDNBlog 工作流表单自定义功能的误区 - 管理软件设计 - CSDNBlog Tapestry的介绍 - bfh365的专栏 - CSDNBlog CFileDialog的详解 - bhw1985的专栏 - CSDNBlog Xindice的FAQ - TKDD的专栏 - CSDNBlog