2013-05-29 2 views
0

내가 필요한 것은 정확히 텍스트의 이외에 이미지가 있어야하는 예외적 인 동작의 관점에서 볼 때 gwt PushButton입니다. 내 ui.xml 파일에서 GWT, GWTP과 UiBinderGWT 사용자 정의 푸시 버튼이 ImageResources와 함께 작동하지 않습니다.

를 사용

, 다음 코드는 작동하지만 버튼

<g:SimplePanel height="100%" styleName="{style.button}" 
    width="100%"> 
    <g:HTMLPanel width="100%" height="100%"> 
     <table align="center"> 
      <tr> 
       <td> 
        <g:Image styleName="{style.pane}" resource='{res.Edit}' /> 
       </td> 
       <td> 
        <g:Label ui:field="label2" text="Edit Project Edit Project" /> 
       </td> 
      </tr> 
     </table> 
    </g:HTMLPanel> 
</g:SimplePanel> 

을 내가 올려 놓으면 다른 이미지를 지정하거나 클릭 할 수 없습니다 솔루션을 검색 한 후, 나는 나중에

처럼 내 ui.xml에 사용되는 어떤 here

package com.test.gwtptestproject.client; 

import com.google.gwt.dom.client.Style; 
import com.google.gwt.dom.client.Style.Float; 
import com.google.gwt.dom.client.Style.Unit; 
import com.google.gwt.resources.client.ImageResource; 
import com.google.gwt.safehtml.shared.SafeHtml; 
import com.google.gwt.user.client.DOM; 
import com.google.gwt.user.client.Element; 
import com.google.gwt.user.client.ui.Image; 

public class MyButton implements SafeHtml { 

    private static final long serialVersionUID = 1L; 
    Image img; 
    private String text; 
    private String innerHtml = ""; 

    public void setImage(ImageResource imgr) { 
     this.img = new Image(imgr); 
     update(); 
    } 

    public void setText(String text) { 
     this.text = text; 
     update(); 
    } 

    private void update() { 
     Element d = DOM.createDiv(); 
     if (img != null) { 
      Element di = DOM.createDiv(); 
      Style s = di.getStyle(); 
      s.setPaddingLeft(5, Unit.PX); 
      s.setPaddingRight(5, Unit.PX); 
      s.setFloat(Float.LEFT); 
      di.appendChild(img.getElement()); 
      d.appendChild(di); 
     } 
     if (text != null) { 
      Element t = DOM.createDiv(); 
      t.setInnerText(text); 
      d.appendChild(t); 
     } 
     innerHtml = d.getInnerHTML(); 

    } 

    public MyButton() { 
    } 

    @Override 
    public String asString() { 
     return innerHtml; 
    } 
} 

에서이 코드를 건너 왔어요

... 
<ui:with field='res' type='com.test.gwtptestproject.resources.ImageResources' /> 
... 
<g:PushButton> 
    <g:upFace> 
    <MyButton image="{res.Edit}" text="Edit"></MyButton> 
    </g:upFace> 
</g:PushButton> 

내 ImageResources 패키지는 다음과 같은 인터페이스를 포함하고 나는 다음과 같은 오류를 가지고 계속 디자이너를 열려고 내가 '돈 때이 패키지는 gwt.xml 파일

public interface ImageResources extends ClientBundle { 
    public ImageResources INSTANCE = GWT.create(ImageResources.class); 

    @Source("Edit.png") 
    ImageResource Edit(); 

    @Source("Edit_Hover.png") 
    ImageResource Edit_Hover(); 

    @Source("Edit_Click.png") 
    ImageResource Edit_Click(); 
} 

의 소스에 추가 t (I 브라우저에서 페이지에 액세스하려고하면 나도 같은 오류가) 나는 응용 프로그램이 ImageResource 아닌 문자열 ISN '를 기대한다 image="{res.Edit}"을 쓸 때 내가 이해에서

[ERROR] java.lang.String required, but {res.Edit} returns com.google.gwt.resources.client.ImageResource: <MyButton image='{res.Edit}' text='Edit'> (:110) 
[ERROR] Deferred binding failed for 'com.test.gwtptestproject.client.SecondView.Binder'; expect subsequent failures 

그것을 해결하는 방법을 알고 그렇지?

* 참고 : 나는 웹 개발 (학교 프로젝트)에 아주 새로운 해요 그래서 당신이 답변 해 드리겠습니다 때 명백한 경우를 제외하고 이미 몇 가지를 알 수있는 가정하지 않는

답변

0

MyButton을 포함하는 것을 잊지 마세요 '오프닝 ui:Binder 태그에 xmnls (XML 네임 스페이스) 속성으로의 패키지 :

<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' 
      xmlns:g='urn:import:com.google.gwt.user.client.ui' 
      xmlns:mybtn='urn:import:com.test.gwtptestproject.client'> 

과 xmnls와 <MyButton> 태그 접두사'별칭 (여기를 mybtn) :

<g:PushButton> 
    <g:upFace> 
    <mybtn:MyButton image="{res.Edit}" text="Edit"></mybtn:MyButton> 
    </g:upFace> 
</g:PushButton> 

이렇게하면 GWT는 MyButton 클래스를 찾을 수있는 곳 (com.test.gwtptestproject.client 패키지)을 알 수 있습니다.

+0

이렇게하면 나에게도 같은 오류가 발생합니다. – Sim