MindFusion.Diagramming for WinForms使用教程:Java Scheduler中资源的自定义绘制(二)

在此博客文章中,我们将说明如何基于特定条件在日历的“资源”视图中为单元格和资源着色。

MindFusion.Diagramming for WinForms是一个能帮助你创建工作流和进程图表的.NET控件;数据库实体关系图表;组织图表;对象层次和关系图表;图表和树。它是基于对象-图表框,表格和箭头类型,将其归类分派给其他并结合成复杂的结构。该控件提供超过预先定义的50多种图表框,如自定义设计样式和对图表框着色等。MindFusion.Diagramming for WinForms现已加入在线订购,Standard Single Developer版本原价2848现在抢购立享优惠只需2345,立即查看详情>>

MindFusion.Diagramming for WinForms最新试用版

相关链接:

MindFusion.Diagramming for WinForms使用教程:Java Scheduler中资源的自定义绘制(一)

二.定制图纸

我们希望通过资源表的外观实现的目标是对单元格背景进行选择性着色,这可以通过自定义绘图来完成。自定义绘图为我们提供了根据视图为日历的大多数元素着色的方法。“自定义绘制元素”示例为我们提供了与CustomDrawElements枚举相对应的元素的可视表示形式,该枚举确定了在时间表中要自定义绘制的内容:

MindFusion.Diagramming for WinForms使用教程:Java Scheduler中资源的自定义绘制(二) 该示例可从以下链接获得:

Java Swing Scheduler:根据“日历”视图演示自定义绘图元素的示例

我们要为资源标头和与此资源相对应的单元格上色。因此,我们使用setCustomDraw方法来实现这一点:

calendar.setCustomDraw(EnumSet.of(CustomDrawElements.ResourceViewRowHeader, CustomDrawElements.ResourceViewCellComplete));

CustomDrawElements枚举的成员允许按位组合。绘制在draw事件的事件处理程序中完成:

calendar.addCalendarListener(new CalendarAdapter() {public void draw(CalendarDrawEvent e) {onCalendarDraw(e);}});

我们使用CalendarAdapter订阅draw事件,该事件由onCalendarDraw方法处理。该CalendarDrawEvent类暴露许多属性,让我们关于正在绘制的元素信息。我们使用getElement方法检查正在绘制的元素是单元格还是标题。如果是单元格,则获取与其对应的资源;如果它是正确的单元格,则绘制一个矩形,该矩形表示当前绘制的元素的整个区域。我们用getBounds方法得到它:

if (e.getElement() == CustomDrawElements.ResourceViewCellComplete){Rectangle bounds = new Rectangle(e.getBounds());bounds.x += 1;if (e.getResource().getId().equals("IdMike") ||    e.getResource().getId().equals("IdChuck") ||    e.getResource().getId().equals("IdTom") ||    e.getResource().getId().equals("IdAlfredo")){g.fillRectangle(_brush3, bounds);g.drawString("Office", _font, _textBrush, bounds, f);}

我们将在与同一资源相对应的资源标头上绘制一个轮廓,并用_brush3为其行着色:

else if (e.getElement() == CustomDrawElements.ResourceViewRowHeader){if (e.getResource().getId().equals("IdMike") ||e.getResource().getId().equals("IdChuck") ||e.getResource().getId().equals("IdTom") ||e.getResource().getId().equals("IdAlfredo")){Brush _brush3 = new SolidBrush(new Color(254, 249, 207, 100));g.fillRectangle(_brush3, e.getBounds());g.drawRectangle(new Pen(new Color(163, 198, 134, 255), 2),e.getBounds().getMinX() + 1,e.getBounds().getMinY() + 1,e.getBounds().getMaxX() - 2,e.getBounds().getMaxY() - 2);}}

在这里,我们检查,如果自定义绘制元素是CustomDrawElements的CalendarDrawEvent类,这为事件提供数据给了我们足够的信息来识别正在绘制的确切元素。

三,所选资源的工具提示

默认情况下,日历提供项目的工具提示。该ItemTooltipEvent提供更多这方面的信息。但是,当用户将鼠标悬停在与我们在第二节中绘制的元素相对应的单元格上方时,我们希望显示工具提示。我们可以通过使用MouseMotionListener并订阅mouseMove事件来实现。请注意,这些是标准的Java Swing事件:

calendar.addMouseMotionListener(new MouseAdapter() {public void mouseMoved(MouseEvent e) {onCalendarMouseMoved(e);     }});

在事件处理程序方法中,我们使用Calendar的getResourceAt方法来学习鼠标悬停在其上的资源。然后,我们使用分配给资源的id-s,并检查鼠标是否位于我们要呈现工具提示的资源上:

private void onCalendarMouseMoved(MouseEvent e) {Resource res = calendar.getResourceAt(e.getX(), e.getY());if (res.getId().equals("IdMike") ||    res.getId().equals("IdChuck") ||    res.getId().equals("IdTom") ||    res.getId().equals("IdAlfredo")){   calendar.setToolTipText(res.getId());}else{     calendar.setToolTipText(""); }}

当我们检测到鼠标悬停在不需要呈现工具提示的资源上时,我们将收费提示文本设置为空字符串。

至此,我们完成了自定义资源样本。


想要购买该产品正版授权请点击【商城购买】,想了解更多产品信息请点击【咨询在线客服】

MindFusion.Diagramming for WinForms使用教程:Java Scheduler中资源的自定义绘制(二)

标签:

来源:慧都

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年7月15日
下一篇 2020年7月15日

相关推荐

发表回复

登录后才能评论