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

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

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

    Live a simple life

    沉默(zhu_xing@live.cn)
    隨筆 - 48, 文章 - 0, 評論 - 132, 引用 - 0
    數(shù)據(jù)加載中……

    【原創(chuàng)】關(guān)于JFace的一個bug(可編輯單元格雙擊,會頻繁調(diào)用TableViewer的雙擊處理)

            閑話稍說,直接上bug視頻:
            Bug視頻
           大致現(xiàn)象:在一個可編輯tableviewer的單元格中,雙擊,對應(yīng)的編輯對話框會不時彈出多次。我這邊嚴(yán)重的時候,會連續(xù)彈出將近20次,那就只能修改了~_~

          Bug分析:
          調(diào)試了一把,發(fā)現(xiàn)是SWT底層將同一鼠標(biāo)事件(通過event.time可以確認(rèn))連續(xù)發(fā)送了多次。而JFace中的TableEditorImpl將這事件轉(zhuǎn)發(fā)給了tableviewer,tableviewer會進(jìn)一步調(diào)用對應(yīng)的double click listener。開發(fā)人員做的double click listener實現(xiàn)就是彈出一個編輯對話框。問題就出現(xiàn)了,當(dāng)彈出的對話框關(guān)閉之后,馬上有彈出了,上面說過,重復(fù)事件又被廣播了~_~

        
         修改方法:
         時間較緊,就直接在TableEditorImpl這邊修改了一把。將org.eclipse.jface插件以源碼工程方式導(dǎo)入,將TableEditorImpl.java類做了一定的修改,加了一個雙擊事件的時間戳判斷。

        【TableEditorImpl.java原有代碼,Eclipse 3.2版本】
          mouseListener = new MouseAdapter() {
                            public void mouseDown(MouseEvent e) {
                                // time wrap? 
                                // check for expiration of doubleClickTime
                                if (e.time <= doubleClickExpirationTime) {
                                    control.removeMouseListener(mouseListener);
                                    cancelEditing();
                                     handleDoubleClickEvent();
                                } else if (mouseListener != null) {
                                    control.removeMouseListener(mouseListener);
                                }
                            }
                        };

            【修改后代碼】
             1、首先在TableEditorImpl中定義了一個雙擊事件的時間戳,緩存上次處理的雙擊事件的時間戳
             2、在轉(zhuǎn)發(fā)雙擊事件之前,做時間戳檢查,避免同一雙擊事件被處理了多次

                 abstract class TableEditorImpl {
                    ...其他代碼省略

                    //add by zhuxing:上次處理的雙擊事件的時間戳
                    private int lastDoubleclickEventTime;

                    private void activateCellEditor() {
                            ..................................
                            mouseListener = new MouseAdapter() {
                            public void mouseDown(MouseEvent e) {
                                // time wrap? 
                                // check for expiration of doubleClickTime
                                if (e.time <= doubleClickExpirationTime) {
                                    control.removeMouseListener(mouseListener);
                                    cancelEditing();
                                    
                                    //檢查本次要處理的雙擊事件是否和上次的事件重復(fù)
                                    if (e.time != lastDoubleclickEventTime) {
                                         lastDoubleclickEventTime = e.time;
                                         handleDoubleClickEvent();
                                    }

                                } else if (mouseListener != null) {
                                    control.removeMouseListener(mouseListener);
                                }
                            }
                        };
                    }
                }

            

             希望能幫到遇到類似問題的同學(xué)

    本博客中的所有文章、隨筆除了標(biāo)題中含有引用或者轉(zhuǎn)載字樣的,其他均為原創(chuàng)。轉(zhuǎn)載請注明出處,謝謝!

    posted on 2008-08-01 11:20 zhuxing 閱讀(1695) 評論(1)  編輯  收藏

    評論

    # re: 【原創(chuàng)】關(guān)于JFace的一個bug(可編輯單元格雙擊,會頻繁調(diào)用TableViewer的雙擊處理)  回復(fù)  更多評論   

    應(yīng)該在bugs.eclipse.org反映一下啊
    2008-08-01 11:29 | Always BaNg.

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 中文字幕a∨在线乱码免费看| 91大神免费观看| 亚洲AV日韩精品久久久久| 免费成人激情视频| 色窝窝亚洲AV网在线观看| 亚洲情综合五月天| 免费无码黄十八禁网站在线观看| 青娱乐在线免费观看视频| 亚洲男人都懂得羞羞网站| 国产精品高清全国免费观看| 东方aⅴ免费观看久久av| 亚洲精品第一综合99久久| 久久久久亚洲AV综合波多野结衣| 中国xxxxx高清免费看视频| 女人裸身j部免费视频无遮挡| 亚洲午夜久久久精品影院| 免费a级毛片无码a∨性按摩| 99蜜桃在线观看免费视频网站| 看Aⅴ免费毛片手机播放| 亚洲福利一区二区精品秒拍| 亚洲国产精品国产自在在线 | 国产精品永久免费视频| 亚洲国产美女视频| 狠狠亚洲婷婷综合色香五月排名| 妻子5免费完整高清电视| 久久久国产精品福利免费| 激情无码亚洲一区二区三区| 亚洲福利视频网站| 国产精品亚洲二区在线观看| 成人免费视频网址| 久视频精品免费观看99| 免费国产污网站在线观看| 杨幂最新免费特级毛片| 精品日韩99亚洲的在线发布| 久久精品亚洲一区二区| 亚洲人成人无码网www国产| 日韩成人免费在线| 免费看国产精品3a黄的视频| 99热这里只有精品6免费| 色www永久免费网站| yellow免费网站|