// 鼠标移动时:清除上次正在显示的节点的中心圆,并显示光标所在的节点的中心圆 @Override public void doWhenMouseMoved(ExecutionContext ec, MouseEvent evt) { if (ec.funcType == FuncType.PROCESS_TRANSITION) { // 画连线 // 1,先重画,以便擦除上次画的节点的中心圆 // TODO 如果没有移出正在显示的节点上,就不用这么样擦除再重画了 if (currentShowingCenterCircleNode != null) { currentShowingCenterCircleNode.setShowCenterCircle(false); currentShowingCenterCircleNode = null; ec.needRepaint(); } // 2,在移到某元素上时,在元素中点显示一个小圆点 BaseNode node = ec.getHelper().getFromAllNodeElementWhichContains(evt.getX(), evt.getY()); if (node != null) { node.setShowCenterCircle(true); // 让元素在中央显示一个小圆 currentShowingCenterCircleNode = node; ec.needRepaint(); } } }
// 鼠标按下时:开始画连线,记下连线的开始节点,并在开始节点中显示红色的中心圆 @Override public void doWhenMousePressed(ExecutionContext ec, MouseEvent evt) { if (ec.funcType == FuncType.PROCESS_TRANSITION) { // 画连线 BaseNode node = ec.getHelper().getFromAllNodeElementWhichContains(evt.getX(), evt.getY()); if (node != null) { node.setCenterCircleColor(Color.RED); // 显示红色的中心圆 node.setShowCenterCircle(true); fromNode = node; ec.needRepaint(); } } }
// 鼠标释放时:添加或取消一个Transition @Override public void doWhenMouseReleased(ExecutionContext ec, MouseEvent evt) { if (ec.funcType == FuncType.PROCESS_TRANSITION) { // 画连线 // 1,如果有From与To元素,且不是同一个元素,就创建并添加一个新的连线元素 if (fromNode != null && toNode != null && fromNode != toNode) { Transition transition = new Transition(fromNode, toNode); ec.addNewElement(transition); // 添加 } // 2,不再显示小中心圆 if (fromNode != null) { fromNode.setShowCenterCircle(false); fromNode.setCenterCircleColor(Color.BLUE); // TODO 还原中心点的默认颜色 fromNode = null; } if (toNode != null) { toNode.setShowCenterCircle(false); toNode = null; } // 3,需要重新显示 ec.needRepaint(); } }