<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    gembin

    OSGi, Eclipse Equinox, ECF, Virgo, Gemini, Apache Felix, Karaf, Aires, Camel, Eclipse RCP

    HBase, Hadoop, ZooKeeper, Cassandra

    Flex4, AS3, Swiz framework, GraniteDS, BlazeDS etc.

    There is nothing that software can't fix. Unfortunately, there is also nothing that software can't completely fuck up. That gap is called talent.

    About Me

     

    ViewerFilter與自定義選中Column的顏色

    ViewerFilter主要用于根據條件來顯示或隱藏Tree或Table中的數據,它的實現就不贅述了,在程序中用了一個下拉框來做觸發條件:

     
    1. filterCombo.addSelectionListener(new SelectionAdapter() {  
    2.             @Override  
    3.             public void widgetSelected(SelectionEvent e) {  
    4.                 String text = filterCombo.getText();  
    5.                 if (!text.equals(EMPTY_FILLTER_STRING)) {  
    6.                     viewer.resetFilters();  
    7.                     viewerFilter.setFilterData(text);  
    8.                     viewer.addFilter(viewerFilter);  
    9.                 } else {  
    10.                     viewer.resetFilters();  
    11.                 }  
    12.             }  
    13.         });  

    從代碼中可以看到,當選中的條件為空字符串時——表明不過濾結果——就調用viewer.resetFilters()方法來去掉Filter,如果選中 條件不為空,就首先將現有的Filter清空,然后將把輸入值作為過濾條件賦給Filter,再將Filter添加給viewer.

    關于自定義選中Column的顏色則參照了Snippet229的代碼,監聽了EraseItem的事件:


     
    1. protected void setSelectedRowColor() {  
    2.         table.addListener(SWT.EraseItem, colorListener);  
    3.     }  
    4.   
    5.     private class RowColorListener implements Listener {  
    6.         public void handleEvent(Event event) {  
    7.   
    8.             if ((event.detail & SWT.SELECTED) != 0) {  
    9.                 GC gc = event.gc;  
    10.                 Rectangle area = table.getClientArea();  
    11.                 /* 
    12.                  * If you wish to paint the selection beyond the end of last 
    13.                  * column, you must change the clipping region. 
    14.                  */  
    15.                 int columnCount = table.getColumnCount();  
    16.                 if (event.index == columnCount - 1 || columnCount == 0) {  
    17.                     int width = area.x + area.width - event.x;  
    18.                     if (width > 0) {  
    19.                         Region region = new Region();  
    20.                         gc.getClipping(region);  
    21.                         region.add(event.x, event.y, width, event.height);  
    22.                         gc.setClipping(region);  
    23.                         region.dispose();  
    24.                     }  
    25.                 }  
    26.                 gc.setAdvanced(true);  
    27.                 if (gc.getAdvanced())  
    28.                     gc.setAlpha(127);  
    29.                 Rectangle rect = event.getBounds();  
    30.                 Color foreground = gc.getForeground();  
    31.                 Color background = gc.getBackground();  
    32.                 gc.setForeground(tabComposite.getDisplay().getSystemColor(  
    33.                         SWT.COLOR_RED));  
    34.                 gc.setBackground(tabComposite.getDisplay().getSystemColor(  
    35.                         SWT.COLOR_LIST_BACKGROUND));  
    36.                 gc.fillGradientRectangle(0, rect.y, 1024, rect.height, false);  
    37.                 // restore colors for subsequent drawing  
    38.                 gc.setForeground(foreground);  
    39.                 gc.setBackground(background);  
    40.                 event.detail &= ~SWT.SELECTED;  
    41.             }  
    42.         }  
    43.     }  


    該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,異常自然也就不會發生了。修改后的代碼如下:


     
    1. filterCombo.addSelectionListener(new SelectionAdapter() {  
    2.     @Override  
    3.     public void widgetSelected(SelectionEvent e) {  
    4.         String text = filterCombo.getText();  
    5.         if (!text.equals(EMPTY_FILLTER_STRING)) {  
    6.             table.removeListener(SWT.EraseItem, colorListener);  
    7.             viewer.resetFilters();  
    8.             viewerFilter.setFilterData(text);  
    9.             viewer.addFilter(viewerFilter);  
    10.             table.addListener(SWT.EraseItem, colorListener);  
    11.         } else {  
    12.             viewer.resetFilters();  
    13.         }  
    14.     }  
    15. }); 

    posted on 2008-04-15 14:05 gembin 閱讀(712) 評論(0)  編輯  收藏 所屬分類: Eclipse RCP

    導航

    統計

    常用鏈接

    留言簿(6)

    隨筆分類(440)

    隨筆檔案(378)

    文章檔案(6)

    新聞檔案(1)

    相冊

    收藏夾(9)

    Adobe

    Android

    AS3

    Blog-Links

    Build

    Design Pattern

    Eclipse

    Favorite Links

    Flickr

    Game Dev

    HBase

    Identity Management

    IT resources

    JEE

    Language

    OpenID

    OSGi

    SOA

    Version Control

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    free counters
    主站蜘蛛池模板: 亚洲毛片网址在线观看中文字幕| 久久久国产精品亚洲一区| 中文毛片无遮挡高清免费| 色播亚洲视频在线观看| 免费无码又爽又刺激毛片| 午夜在线免费视频 | 亚洲精品蜜夜内射| 亚洲综合区小说区激情区| 亚洲综合免费视频| 免费大片av手机看片| 亚洲欧洲中文日产| 亚洲午夜爱爱香蕉片| 啦啦啦完整版免费视频在线观看| 羞羞漫画小舞被黄漫免费| 亚洲精品美女久久久久9999| 伊人久久亚洲综合影院| 国产成人免费高清激情明星| 一级成人a做片免费| 亚洲最大的成人网站| 亚洲gv猛男gv无码男同短文| 国产片免费在线观看| jjizz全部免费看片| 99久久婷婷免费国产综合精品| 亚洲综合一区二区三区四区五区| 亚洲国产另类久久久精品| 国产一级理论免费版| 很黄很色很刺激的视频免费| 免费无码H肉动漫在线观看麻豆| 激情无码亚洲一区二区三区 | 男女一进一出抽搐免费视频| 中文字幕亚洲情99在线| 亚洲最大福利视频网站| 最新精品亚洲成a人在线观看| 全免费a级毛片免费看无码| AV无码免费永久在线观看| 免费h视频在线观看| 成年免费a级毛片免费看无码| 国产亚洲精品91| 亚洲精华国产精华精华液网站| 亚洲精品欧洲精品| 亚洲国产老鸭窝一区二区三区|