2013-06-11 61 views
1

我已經創建了我自己的gwt小部件,它由TextLabel和圖像組成。 我需要這個小部件是可以關注的。我從界面hasFocusHandler,focusable和blurhandler擴展這個小部件。沒有任何工作。當我點擊或在窗口小部件外部時,我沒有收到焦點或模糊事件。我該怎麼辦?如何創建可調焦的小部件

我的代碼:

public class MyWidget extends ComplexPanel implements HasFocusHandlers, HasBlurHandlers, HasClickHandlers, Focusable{ 

    private Icon icon = new Icon(); 

    private TextNode text = new TextNode(""); 

    private static final FocusImpl impl = FocusImpl.getFocusImplForWidget(); 

    protected static FocusImpl getFocusImpl() { 
    return impl; 
    } 

    public HandlerRegistration addClickHandler(ClickHandler handler) { 
    return addDomHandler(handler, ClickEvent.getType()); 
    } 

    @Override 
    public HandlerRegistration addBlurHandler(BlurHandler handler) { 
    return addDomHandler(handler,BlurEvent.getType()); 
    } 

    @Override 
    public HandlerRegistration addFocusHandler(FocusHandler handler) { 
    return addDomHandler(handler, FocusEvent.getType()); 
    } 

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

    public int getTabIndex() { 
    return impl.getTabIndex(getElement()); 
    } 

    @Override 
    public void setAccessKey(char key) { 
    DOM.setElementProperty(getElement(), "accessKey", "" + key); 
    } 

    @Override 
    public void setFocus(boolean focused) { 
    if (focused) { 
     impl.focus(getElement()); 
    } else { 
     impl.blur(getElement()); 
    } 
    }  

    @Override 
    public void setTabIndex(int index) { 
    impl.setTabIndex(getElement(), index); 
    } 

    @Override 
    protected void onAttach() { 
    super.onAttach(); 

    int tabIndex = getTabIndex(); 
    if (-1 == tabIndex) { 
     setTabIndex(0); 
    } 
    } 
} 

我的實現不工作(我無法接收的聚焦狀態的呼叫,當我點擊進myWidget)

mywidget.addFocusHandler(new FocusHandler() 
{ 
    @Override 
    public void onFocus(FocusEvent event) { 
    //DO SOMETHING     
    }    
}); 

回答

1

我們應該有更多的信息,因爲我錯過一些代碼,例如,你在哪裏附加圖標和文本節點到DOM?

我做了一個例子,它適用於我。看看:

@UiField Label labelText; 

public MyWidget(String text) { 
    super(); 
    //That is the key. Attach the widgets to the dom 
    setElement(uiBinder.createAndBindUi(this).getElement()); 
    labelText.setText(text); 
} 

此外,我沒有在類中聲明我的內部小部件,我創建了一個UiBinder類。基本上:

<!DOCTYPE ui:UiBinder SYSTEM 'http://dl.google.com/gwt/DTD/xhtml.ent'> 
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' 
    xmlns:g='urn:import:com.google.gwt.user.client.ui'> 
    <ui:style> 
    </ui:style> 

    <g:FlowPanel> 
    <g:Label ui:field="labelText"> 
    </g:Label>  
    </g:FlowPanel> 
</ui:UiBinder> 

在這種情況下,您可以更快,更容易地將您的小部件附加到面板。並在構造函數中只做一個setElement()。

如果您有任何疑問,只需詢問!

相關問題