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

          我使用的是GEF0.10(http://gef.tigris.org),在某一個Fig上點擊鼠標右鍵彈出PopupMenu時,發(fā)現(xiàn)有閃爍的現(xiàn)象,經(jīng)過追查發(fā)現(xiàn),一個鼠標右擊動作會分別觸發(fā)Editor.mousePressed(e)、mouseReleased(e)、mouseClicked(e)三個事件,這些事件最終都要流經(jīng)ModeManager,而ModeManager采取的是廣播的方式分發(fā)這些事件,把這些事件依次轉(zhuǎn)發(fā)給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的代碼都要被執(zhí)行,這樣在一個鼠標右擊動作中實際上彈出了三次PopupMenu,因此造成了閃爍。解決辦法是extend默認的ModePopup,覆蓋這三個方法,將判斷改成if ( me.isPopupTrigger())即可。

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

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


          網(wǎng)站導(dǎo)航:
           
           
          主站蜘蛛池模板: 饶阳县| 霍林郭勒市| 鄯善县| 昌乐县| 枣强县| 韶关市| 丹阳市| 平顶山市| 清苑县| 锡林浩特市| 边坝县| 万山特区| 敖汉旗| 中超| 湄潭县| 乐业县| 孟津县| 长海县| 乌苏市| 靖西县| 高平市| 元江| 谷城县| 西乌珠穆沁旗| 沁水县| 南宁市| 南陵县| 丁青县| 和林格尔县| 甘谷县| 漠河县| 平乐县| 维西| 永清县| 肥西县| 含山县| 鲁山县| 抚州市| 永泰县| 望奎县| 莱芜市|