Dev Zone
          偏執狂才能生存,人生/事業的路上需要再堅持一下
          但是又怎么說得清堅持的結果,道得盡堅持的含義

          我使用的是GEF0.10(http://gef.tigris.org),在某一個Fig上點擊鼠標右鍵彈出PopupMenu時,發現有閃爍的現象,經過追查發現,一個鼠標右擊動作會分別觸發Editor.mousePressed(e)、mouseReleased(e)、mouseClicked(e)三個事件,這些事件最終都要流經ModeManager,而ModeManager采取的是廣播的方式分發這些事件,把這些事件依次轉發給mode對列中的所有Mode。ModePopup是默認的一個Mode之一,負責提供Fig的彈出菜單功能。而ModePopup中的這三個事件都作了如下的判斷: 

             public void mouseClicked(MouseEvent me) {
                  boolean popUpDisplayed 
          = false;
                  
          if(me.isPopupTrigger() || me.getModifiers() == InputEvent.BUTTON3_MASK) {
                      popUpDisplayed 
          = showPopup(me);
                      
          if (LOG.isDebugEnabled()) {
                          
          if (popUpDisplayed) LOG.debug("MousePressed detected as a popup and popup displayed and event consumed");
                          
          else  LOG.debug("MousePressed detected as a popup but no popup to display");
                      }
                      
          return;
               }
                  LOG.debug(
          "MousePressed is not a popup trigger");
              }

           

          其中加紅的這段不知道為什么要作me.getModifiers() == InputEvent.BUTTON3_MASK的判斷,加上這個判斷后只要是鼠標右擊動作,ModePopup的mousePressed、mouseReleased和mouseClicked事件中showPopup的代碼都要被執行,這樣在一個鼠標右擊動作中實際上彈出了三次PopupMenu,因此造成了閃爍。解決辦法是extend默認的ModePopup,覆蓋這三個方法,將判斷改成if ( me.isPopupTrigger())即可。

          posted on 2005-05-17 22:10 dev 閱讀(633) 評論(0)  編輯  收藏

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


          網站導航:
           
           
          主站蜘蛛池模板: 新乡县| 五华县| 南靖县| 玛纳斯县| 武汉市| 江门市| 仁布县| 广州市| 囊谦县| 海宁市| 慈溪市| 卫辉市| 白城市| 锡林浩特市| 泗水县| 蒙阴县| 深州市| 当雄县| 京山县| 育儿| 镇原县| 微山县| 城固县| 江阴市| 东乡族自治县| 房产| 庐江县| 桑日县| 左云县| 津市市| 德江县| 新巴尔虎左旗| 荥阳市| 冕宁县| 彝良县| 澳门| 奉贤区| 库尔勒市| 丹阳市| 左权县| 彰武县|