2017-03-23 120 views
0

我想创建一个特殊的按钮,它将有图像,文本,标签和其他图像。GWT创建与用户界面的自定义按钮

我有以下代码:

public class CrossingStateMenuItemButton extends Composite implements HasText, HasClickHandlers, 
    ClickHandler { 
    @UiField 
    FocusPanel pane; 
    @UiField 
    Label label; 
    @UiField 
    Label state; 
    @UiField 
    Image error; 
    @UiField 
    Image acoustic; 

    private CrossingObject crossingObject; 

    interface CrossingStateMenuItemButtonBinder extends UiBinder<Widget, CrossingStateMenuItemButton> { 
    } 

    private static CrossingStateMenuItemButtonBinder binder = GWT 
     .create(CrossingStateMenuItemButtonBinder.class); 

    public CrossingStateMenuItemButton(CrossingObject crossingObject) { 
    this.crossingObject = crossingObject; 
    pane.addClickHandler(this); 
    initWidget(binder.createAndBindUi(this)); 
    } 

    public CrossingObject getCrossingObject() { 
    return crossingObject; 
    } 

    public void setCrossingObject(CrossingObject crossingObject) { 
    this.crossingObject = crossingObject; 
    } 

    @Override 
    public void onClick(ClickEvent event) { 
    this.fireEvent(event); 
    } 

    @Override 
    public HandlerRegistration addClickHandler(ClickHandler handler) { 
    return addHandler(handler, ClickEvent.getType()); 
    } 

    @Override 
    public String getText() { 
    return label.getText(); 
    } 

    @Override 
    public void setText(String text) { 
    this.label.setText(text); 
    } 

    public void setState(LabelType state) { 
    this.state.setType(state); 
    } 

    public void setAcoustic(boolean enabled) { 
    this.acoustic.setVisible(enabled); 
    } 
} 

我有对应的用户界面粘合模板:

<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' 
    xmlns:b="urn:import:org.gwtbootstrap3.client.ui" xmlns:g="urn:import:org.gwtbootstrap3.client.ui.gwt" 
    xmlns:h="urn:import:org.gwtbootstrap3.client.ui.html" xmlns:gwt="urn:import:com.google.gwt.user.client.ui"> 

    <ui:with field='res' 
     type='com.company.applicationname.client.resources.AppResources' /> 

    <gwt:FocusPanel ui:field="pane" 
     addStyleNames="{res.style.crossingStateMenuItem}"> 
     <b:Image ui:field="error" 
      styleName="{res.style.crossingStateMenuItemErrorImage}"></b:Image> 
     <b:Label ui:field="label" styleName="{res.style.crossingStateMenuItemLabel}"></b:Label> 
     <b:Label ui:field="state" type="DEFAULT" 
      styleName="{res.style.crossingStateMenuItemStateLabel}">off</b:Label> 
     <b:Image ui:field="acoustic" 
      styleName="{res.style.crossingStateMenuItemAcousticImage}"></b:Image> 
    </gwt:FocusPanel> 

</ui:UiBinder> 

但是当我尝试编译它,我得到:

类型不匹配:无法从FocusPanel转换成Widget

我被困在这一段时间了,不知道问题在哪里,我尝试了不同的面板(SimplePanel,HTMLPanel ..)没有任何运气。如何使它工作?

回答

0

这是一个愚蠢的错误,因为我从“org.gwtbootstrap3.client.ui.gwt.Widget”而不是“com.google.gwt.user.client.ui.Widget”导入了Widget。