flowable设置流程跟踪高亮线的颜色
背景:在实际情况下,很多人对这个红色的高亮有意见,所以这里我把我的修改颜色的代码分享出来,希望对大家有帮助。(如果有问题可以加QQ群:633168411 里面很多高手,人也都非常善良)
效果如下:
1、定义 MyDefaultProcessDiagramCanvas
public class MyDefaultProcessDiagramCanvas extends DefaultProcessDiagramCanvas { //设置高亮线的颜色 这里我设置成绿色 protected static Color HIGHLIGHT_SEQUENCEFLOW_COLOR = Color.GREEN; public MyDefaultProcessDiagramCanvas(int width, int height, int minX, int minY, String imageType, String activityFontName, String labelFontName, String annotationFontName, ClassLoader customClassLoader) { super(width, height, minX, minY, imageType, activityFontName, labelFontName, annotationFontName, customClassLoader); } public MyDefaultProcessDiagramCanvas(int width, int height, int minX, int minY, String imageType) { super(width, height, minX, minY, imageType); } /** * 画线颜色设置 */ public void drawConnection(int[] xPoints, int[] yPoints, boolean conditional, boolean isDefault, String connectionType, AssociationDirection associationDirection, boolean highLighted, double scaleFactor) { Paint originalPaint = g.getPaint(); Stroke originalStroke = g.getStroke(); g.setPaint(CONNECTION_COLOR); if (connectionType.equals("association")) { g.setStroke(ASSOCIATION_STROKE); } else if (highLighted) { //设置线的颜色 g.setPaint(HIGHLIGHT_SEQUENCEFLOW_COLOR); g.setStroke(HIGHLIGHT_FLOW_STROKE); } for (int i = 1; i < xPoints.length; i++) { Integer sourceX = xPoints[i - 1]; Integer sourceY = yPoints[i - 1]; Integer targetX = xPoints[i]; Integer targetY = yPoints[i]; Line2D.Double line = new Line2D.Double(sourceX, sourceY, targetX, targetY); g.draw(line); } if (isDefault) { Line2D.Double line = new Line2D.Double(xPoints[0], yPoints[0], xPoints[1], yPoints[1]); drawDefaultSequenceFlowIndicator(line, scaleFactor); } if (conditional) { Line2D.Double line = new Line2D.Double(xPoints[0], yPoints[0], xPoints[1], yPoints[1]); drawConditionalSequenceFlowIndicator(line, scaleFactor); } if (associationDirection == AssociationDirection.ONE || associationDirection == AssociationDirection.BOTH) { Line2D.Double line = new Line2D.Double(xPoints[xPoints.length - 2], yPoints[xPoints.length - 2], xPoints[xPoints.length - 1], yPoints[xPoints.length - 1]); drawArrowHead(line, scaleFactor); } if (associationDirection == AssociationDirection.BOTH) { Line2D.Double line = new Line2D.Double(xPoints[1], yPoints[1], xPoints[0], yPoints[0]); drawArrowHead(line, scaleFactor); } g.setPaint(originalPaint); g.setStroke(originalStroke); } /** * 高亮节点设置 */ public void drawHighLight(int x, int y, int width, int height) { Paint originalPaint = g.getPaint(); Stroke originalStroke = g.getStroke(); //设置高亮节点的颜色 g.setPaint(HIGHLIGHT_COLOR); g.setStroke(THICK_TASK_BORDER_STROKE); RoundRectangle2D rect = new RoundRectangle2D.Double(x, y, width, height, 20, 20); g.draw(rect); g.setPaint(originalPaint); g.setStroke(originalStroke); }
2、定义一个 MyDefaultProcessDiagramGenerator
这里只是修改一下名称 把
DefaultProcessDiagramGenerator的代码搬进去即可 然后把
DefaultProcessDiagramCanvas 改成 MyDefaultProcessDiagramCanvas 即可
public class MyDefaultProcessDiagramGenerator implements ProcessDiagramGenerator {
}
3、生成图片
@Service
public class FlowProcessDiagramGenerator extends MyDefaultProcessDiagramGenerator {
private static final String IMAGE_TYPE = "png";
@Value("${flowable.activityFontName}")
private String activityFontName;
@Value("${flowable.labelFontName}")
private String labelFontName;
@Value("${flowable.annotationFontName}")
private String annotationFontName;
/**
* 生成图片流
*
* @param bpmnModel 模型
* @param highLightedActivities 活动节点
* @param highLightedFlows 高亮线
* @return
*/
public InputStream generateDiagram(BpmnModel bpmnModel, List<String> highLightedActivities, List<String> highLightedFlows) {
return generateDiagram(bpmnModel, IMAGE_TYPE, highLightedActivities,
highLightedFlows, activityFontName, labelFontName, annotationFontName,
null, 1.0, true);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具