分享

工作流图形化流程定义编程

 夜郎 2007-07-12

大多采用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(MouseEvent e)的响应事件主要反映用户选择了何种元素,并将他设置到第6项的类成员变量中.选择的标准是鼠标点击的区域是否在(节点X坐标,节点Y坐标),(节点X 坐标,节点Y坐标+节点图形高度),(节点X坐标+节点图形宽度,节点Y坐标),(节点X坐标+节点图形宽度,节点Y坐标+节点图形高度)所围成的区域 内.通过MounseEvent的getX(),getY()获取当前点击的坐标.方法最后调用 repaint().
(9)mouseEntered(MouseEvent e) &&mouseExited(MouseEvent e) 可以暂时不具体实现;
(10)mouseDragged(MouseEvent e)中判断根据第6项和第8项的当前选择元素是否为空,如果不为空,则设置当前选择元素的坐标选择值,方法最后调用  repaint();和 updateUI();为了考虑人性化,在拖动时,应把鼠标图形设置为移动状态this.setCursor(new Cursor(Cursor.MOVE_CURSOR)),但在其他鼠标事件中,注释释放鼠标状态到合理状态.
(11)mouseReleased(MouseEvent e)中,首先设置鼠标为正常状态,setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
在另外的面板中(选择增加何种元素的面板),如果选择了绘制一种新元素,则调用流程增加节点/连接弧/折点的方法.
(12)mouseMoved(MouseEvent e)方法,主要判断是否进入了某个图形区域,并将鼠标变为手形setCursor(new Cursor(Cursor.HAND_CURSOR));没有进入某图形区域的处理:
如 果在另外的面板中(选择增加何种元素的面板)有选择,应该把鼠标变为提示用户可以增加的形状,如setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));如果什么事也没有,应setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
(13)在鼠标事件的时候最后别忘了repaint()等重绘面板方法;
(14)执行删除操作,应该参照第8项判断选择了何种元素.

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多