ViewerFilter主要用于根据条件来显示或隐藏Tree或Table中的数据,它的实现就不赘述了,在程序中用了一个下拉框来做触发条件:
- filterCombo.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- String text = filterCombo.getText();
- if (!text.equals(EMPTY_FILLTER_STRING)) {
- viewer.resetFilters();
- viewerFilter.setFilterData(text);
- viewer.addFilter(viewerFilter);
- } else {
- viewer.resetFilters();
- }
- }
- });
从代码中可以看到,当选中的条件为空字符串时——表明不过滤结果——就调用viewer.resetFilters()方法来去掉Filter,如果选中条件不为空,就首先将现有的Filter清空,然后将把输入值作为过滤条件赋给Filter,再将Filter添加给viewer.
关于自定义选中Column的颜色则参照了Snippet229的代码,监听了EraseItem的事件:
- protected void setSelectedRowColor() {
- table.addListener(SWT.EraseItem, colorListener);
- }
-
- private class RowColorListener implements Listener {
- public void handleEvent(Event event) {
-
- if ((event.detail & SWT.SELECTED) != 0) {
- GC gc = event.gc;
- Rectangle area = table.getClientArea();
-
-
-
-
- int columnCount = table.getColumnCount();
- if (event.index == columnCount - 1 || columnCount == 0) {
- int width = area.x + area.width - event.x;
- if (width > 0) {
- Region region = new Region();
- gc.getClipping(region);
- region.add(event.x, event.y, width, event.height);
- gc.setClipping(region);
- region.dispose();
- }
- }
- gc.setAdvanced(true);
- if (gc.getAdvanced())
- gc.setAlpha(127);
- Rectangle rect = event.getBounds();
- Color foreground = gc.getForeground();
- Color background = gc.getBackground();
- gc.setForeground(tabComposite.getDisplay().getSystemColor(
- SWT.COLOR_RED));
- gc.setBackground(tabComposite.getDisplay().getSystemColor(
- SWT.COLOR_LIST_BACKGROUND));
- gc.fillGradientRectangle(0, rect.y, 1024, rect.height, false);
-
- gc.setForeground(foreground);
- gc.setBackground(background);
- event.detail &= ~SWT.SELECTED;
- }
- }
- }
该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,异常自然也就不会发生了。修改后的代码如下:
- filterCombo.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- String text = filterCombo.getText();
- if (!text.equals(EMPTY_FILLTER_STRING)) {
- table.removeListener(SWT.EraseItem, colorListener);
- viewer.resetFilters();
- viewerFilter.setFilterData(text);
- viewer.addFilter(viewerFilter);
- table.addListener(SWT.EraseItem, colorListener);
- } else {
- viewer.resetFilters();
- }
- }
- });
分享到:
- 2006-12-26 16:10
- 浏览 2811
- 评论(0)
- 论坛回复 / 浏览 (0 / 3604)
- 查看更多
相关推荐
附近中是DataGridView控件添加自定义ColumnType的方法。
tekla官方自定义节点CB2_Column_Beam.uel
自定义datagridview,包括:样式、合并单元格、进度条列、日期列、合并行……
C# DataGridView自定义列 用Combobox 和DataGridViewLookUpColumn 京华志&精华志出品 希望大家互相学习,互相进步 支持CSDN 支持微软 主要包括C# ASP.NET SQLDBA 源码 毕业设计 开题报告 答辩PPT等
Column permutation cipher是基于置换的加密解密方式。利用本程序可实现Column permutation cipher的加密和解密。
实现自定义multiRadioButtonColumn
利用的是Column的render实现单元格背景颜色改变,本文给予了实现代码,感兴趣的朋友可以了解下,或许对你学习ExtJS4 Grid有所帮助
赠送jar包:parquet-column-1.10.0.jar; 赠送原API文档:parquet-column-1.10.0-javadoc.jar; 赠送源代码:parquet-column-1.10.0-sources.jar; 赠送Maven依赖信息文件:parquet-column-1.10.0.pom; 包含翻译后...
赠送jar包:parquet-column-1.10.1.jar; 赠送原API文档:parquet-column-1.10.1-javadoc.jar; 赠送源代码:parquet-column-1.10.1-sources.jar; 赠送Maven依赖信息文件:parquet-column-1.10.1.pom; 包含翻译后...
vxe-grid加载页面默认表格选中第一行高亮.vue
构建DataGridView的定制NumericUpDown单元格和表格列的类型,如何在DataGridView Columns ColumnType中显示出来供用户选择
利用Python+Gurobi编写代码,复现文章:Solving two-stage robust optimization problems using a column-and- constraint generation method。
WinRTXamlToolkit.Controls.DataVisualization.Charting图形报表下自定义控件,分为单组数据图形使用SingleChart用户控件和多组数据图形使用MixedChart用户控件。传递数据集合和其它参数,让图形按需展示。 一、...
赠送jar包:parquet-column-1.8.2.jar; 赠送原API文档:parquet-column-1.8.2-javadoc.jar; 赠送源代码:parquet-column-1.8.2-sources.jar; 赠送Maven依赖信息文件:parquet-column-1.8.2.pom; 包含翻译后的API...
In this article, we survey recent research on column-oriented database systems, or column-stores, where each attribute of a table is stored in a separate file or region on storage. Such databases have...
73.复制单元格列高与栏宽 74.取消隐藏工作表(包括vba Project工程保护的) 75.删除单元格自定义名称 76.从文件路径中取得文件名 77.取得一个文件的扩展名 78.取得一个文件的路径 79.十进制转二进制 80.检查一个数组...
SELECT column_name(s) FROM table_name WHERE column_name LIKE patternSELECT column_name(s) FROM table_name WHERE column_name LIKE pattern
PB12.5 dw 报错Line 130 Column 487 incorrect syntax问题解决
即兴实现的一个自定义VIew效果,在我的专栏可以看到博文说明:http://blog.csdn.net/column/details/13877.html
QVariant& data)和QTreeWidgetItem的setData(int column,int role,QVariant& data)等,通过setData函数我们可以为每个单元格保存自己想绑定的数据及为每个树节点保存想绑定的自定义类型的数据。 但是,QVariant中...