GWT:如何在单击时禁用锚链接事件

时间:2011-12-12 06:14:26

标签: gwt

我想在单击一次时禁用锚链接事件。我使用anchor.setenabled(false)但没有发生任何事情。当我再次点击同一按钮时,事件etrue。我当时想要false

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) {
                        }
                    });}

2 个答案:

答案 0 :(得分:3)

GWT中的锚点始终存在setEnabled()的问题,因为HTML不支持此类属性。一个快速的解决方法是创建一个新的小部件,它将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

答案 1 :(得分: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
            }
        }

    });