ViewerFilter与自定义选中Column的颜色

ViewerFilter主要用于根据条件来显示或隐藏Tree或Table中的数据,它的实现就不赘述了,在程序中用了一个下拉框来做触发条件:

从代码中可以看到,当选中的条件为空字符串时——表明不过滤结果——就调用viewer.resetFilters()方法来去掉Filter,如果选中条件不为空,就首先将现有的Filter清空,然后将把输入值作为过滤条件赋给Filter,再将Filter添加给viewer.

关于自定义选中Column的颜色则参照了Snippet229的代码,监听了EraseItem的事件:


该Snippet的URL为:http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet229.java?view=co

自定义颜色的目的是为了个性化,它与Filter看上来似乎是风马牛不相及的,但是在应用中却出现了问题,会出现一大堆空指针异常,而且Debug根本跟踪不过去,最开始以为是Filter实现的问题,但做了很长时间的调试都没有发现问题所在,过了4、5个小时以后,才想到也许和EraseItem事件有关系,然后把上面的代码注释掉,果然就一点问题没有了.......

又过了好久,才在同事的提示下,监测一下在EraseItem事件被触发的时候,Filter是否完成了对数据的过滤,赫然发现在过滤以后TableItem本来应该只有两个的,但是在RowColorListener的handleEvent方法中table.getItemCount的结果却是三,也就是在Filter的过滤还未结束的时候,handleEvent已经被触发了......这样子到最后自然会有异常产生。问题的来源找到了,解法也随即而生,在输入条件发生改变的时候,先把RowColorListener remove掉,当Filter完成以后再把RowColorListener添加给Table,异常自然也就不会发生了。修改后的代码如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值