2017-03-23 2 views
0

이미지, 텍스트, 레이블 및 다른 이미지가있는 특수 버튼을 만들고 싶습니다.GWT는 Ui 바인더로 사용자 정의 버튼을 만듭니다.

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를 바인더 템플릿이 있습니다 :

<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에서 위젯으로 변환 할 수 없습니다.

지금 당장 붙어있어 문제가 어디인지 전혀 모르겠다. 다른 패널 (SimplePanel, HTMLPanel ..)을 사용해 보았습니다. 어떻게 작동 시키는가?

답변

0

"com.google.gwt.user.client.ui.Widget"대신 "org.gwtbootstrap3.client.ui.gwt.Widget"에서 위젯을 가져오고 있기 때문에 어리석은 실수였습니다.