告警传播过滤树节点

我们在日常Swing开发过程中,经常会用到JTree组件,且经常会有“动态过滤”的要求。动态过滤的含义是:在一颗巨大的树上面,需要动态的对数据进行过滤。那么,怎么来实现这个要求呢?

听上去动态过滤很简单,实则不然。举一个例子:我们有一个巨大的树结构,层次很深。树中的各个树枝、树叶,都可能会有“问题”产生。假如我们要动态过滤,仅仅显示“所有有问题的数据”,那么,该如何实现呢?不要忘了一点:如果一个树杈自己没问题,但是下面存在有问题的孩子,甚至孙子,它都必须要显示而不能被过滤掉,否则,老爹没有了,孩子何来?正所谓皮之不存,毛将焉附?

仔细思考起来,情况有点复杂了。我们首先想到的是,可以用TWaver的TTree来做树,然后用VisibleFilter进行数据过滤。不过,要判断每一个数据是否要显示,不但要判断自己“有无问题”,还要判断“任何一个孩子或后代有无问题”,一旦有问题,则必须显示,否则则隐藏。

如果要动态的循环便利所有子层孩子,且不说要写大量代码,单单这个重复计算消耗就吃不消。有无简单的方法呢?

突然,这时候,我们想起了TWaver中一个固有功能:告警及告警传播。在TWaver的DataBox中,已经预置了告警传播功能。当DataBox中任何数据发生了告警,则会沿着父对象的路径进行传递,直到最顶层。而每一个对象,其传播的结果,都会在Element.getAlarmState()这个对象中存储,我们可以直接调用查看。看来,我们可以直接利用TWaver的这一特性,避免“重新发明轮子”。

整理思路,可以这样:首先,用TWaver的TTree和DataBox中的告警传播机制,在每一个数据“发生问题”的时候,就创建一个告警。此时,告警会在DataBox中自动传播。然后,在显示的时候,我们给树增加一个过滤器VisibleFilter,判断其是否有告警(这个判断不但判断是否有自身告警,也包括传播告警,也就是被子孙传播上来的告警)。如果有告警,就显示,否则就隐藏。

在作者的应用中,需要显示的是一个产品的产品结构分解,也就是BOM结构,它是一个多层次的结构。当预测到物料可能发生短缺,就会“产生问题
”,具体做法是,给这个数据产生一个“告警”。代码如下:

1 //当库存数小于零的时候,则意味着发生物料短缺,此时产生告警。
2 if (onhandQuantity.compareTo(BigDecimal.ZERO) < 0) {
3 this.getAlarmState().clear();
4 this.getAlarmState().addNewAlarm(AlarmSeverity.CRITICAL);
5 }

显示效果如下:
 

 接下来,我们再给tree设置一个过滤器,判断每一个结点是否有告警(包括被传播告警)。如果有告警,意味着自己或下方有问题存在,显示,否则,就隐藏。

 

1 VisibleFilter visibleFilter = new VisibleFilter() {
2 public boolean isVisible(Element element) {
3 //这里太cool了,直接一句话代替了原来1000多行代码,简单高效!
4 return !element.getAlarmState().isEmpty();
5 }
6 };

接下来,在界面上用一个JCheckBox控制visible是否生效,就结束了。

来,看一下过滤后的效果:


效果不错吧,是不是有点四两拨千斤的味道呢?

活学活用,TWaver会给你不断带来意想不到的惊喜。

转载于:https://www.cnblogs.com/twaver/archive/2011/10/13/2210402.html

本项目是一个基于SSM(Spring+SpringMVC+MyBatis)框架和Vue.js前端技术的家教平台系统。该系统旨在为家教和学生提供一个便捷、高效的在线交流和预约平台,涵盖了从用户注册登录、个人信息管理、课程发布与搜索、预约与取消预约、评价反馈等一系列功能。 在后台管理方面,系统提供了管理员对用户信息、课程信息、预约记录等进行管理的功能,确保平台的正常运行和数据的准确性。通过Spring框架的依赖注入和AOP特性,实现了业务逻辑的清晰分离和高效处理;SpringMVC则负责处理前端请求和响应,提供友好的用户界面;MyBatis作为ORM框架,简化了数据库操作,提高了数据访问的效率和安全性。 前端部分采用Vue.js框架,结合Vue Router进行页面路由管理,Axios进行HTTP请求,实现了前后端分离的开发模式。Vue.js的组件化开发和响应式数据绑定特性,使得前端页面更加动态和交互性强,提升了用户体验。 数据库设计采用了MySQL,存储了用户信息、课程信息、预约记录等核心数据。通过合理的数据库表结构和索引设计,保证了系统的高效运行和数据的一致性。 该项目不仅适合计算机相关专业的毕设学生参考和学习,也适合Java学习者进行项目实战练习。通过对该项目的深入理解和二次开发,可以实现更多个性化功能,进一步提升技术水平和实践能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值