2011-12-12 77 views
2

我想在一次單擊時禁用錨鏈接事件。我用anchor.setenabled(false)但沒有任何事情發生。當我再次點擊相同的按鈕時,事件etrue。那時我想要falseGWT:如何在單擊時禁用錨鏈接事件

public void onCellClick(GridPanel grid, int rowIndex, int colindex,EventObject e) 
    { 
        if(rowIndex==0 && colindex==2){ 
         tomcatHandler = "Start"; 
         anchorStart.setEnabled(false); 
        }else if(rowIndex==0 && colindex==3){ 
         tomcatHandler = "Stop"; 
         ****anchorStop.setEnabled(false); 
         anchorStart.setEnabled(false); 
         anchorRestart.setEnabled(true);**** 

       }else if(rowIndex==0 &&colindex==4){ 
        tomcatHandler = "Restart"; 
        anchorRestart.setEnabled(false); 
       } 

        AdminService.Util.getInstance().tomcat(tomcatHandler,new AsyncCallback<String>() { 
         @Override 
         public void onSuccess(String result) { 
          imageChangeEvent(result); 
         } 
         @Override 
         public void onFailure(Throwable caught) { 
         } 
        });} 

回答

3

錨杆GWT一直與setEnabled()問題,因爲HTML不支持這樣的屬性。一個快速的解決辦法是建立一個新的widget的子類GWT的Anchor,添加以下重寫:

@Override 
public void onBrowserEvent(Event event) { 
    switch (DOM.eventGetType(event)) { 
     case Event.ONDBLCLICK: 
     case Event.ONFOCUS: 
     case Event.ONCLICK: 
      if (!isEnabled()) { 
       return; 
      } 
      break; 
    } 
    super.onBrowserEvent(event); 
} 

這將禁用瀏覽器事件的傳遞到GWT的Anchor類(草率地禁止所有相關的處理程序)當鏈路雙點擊,關注或點擊,處於禁用狀態。

Source

0

它似乎並沒有真正禁用錨,但它確實保留已經設定anchor.setEnabled()的狀態,所以只是測試你的處理程序中例如

myAnchor.addClickHandler(new ClickHandler() { 

     @Override 
     public void onClick(ClickEvent evt) { 
      // write to filter and then call reload 
      if (((Anchor) evt.getSource()).isEnabled()) { 
       //do stuff 
      } 
     } 

    });