2010-04-06 13 views
6

I aşağıdaki biçimlendirmeye sahip bir widget yazıyorum:GWT UiHandler HTMLPanel'dir

<g:HTMLPanel ui:field="shortcutPanel" styleName="{style.shortcut}"> 
    <g:Image ui:field="shortcutImage"></g:Image> 
    <span ui:field="shortcutLabel"></span> 
</g:HTMLPanel> 

Yani esasen bir sarar div ve görüntü ve bir etiket. Artık, görüntü işleyicilerini resim/yayılma alanına eklemek yerine, onClick'in HTMLPanel ile ilişkilendirilmesini istiyorum. Benim sorunum Ancak gwt

shortcutPanel bir addClickHandler yöntemi yüzden fark farz ediyorum

ilişkili olmayan olmadığını bana HTMLPanel'dir o boyunca HasClickHandlers falan uygulamıyor yani söylemesidir hat. Bir HTMLPanel veya daha iyisi gibi bir UI öğesine bir tıklatma işleyicisinin eklenmesinin standart yolunun ne olduğunu merak ediyorum. Aslında, gerçekten de @UiHandler ile olayları kolayca ekleyebildiğim bir GWT Widget'ı var. Ek açıklama.

cevap

20

Muhtemelen FocusPanel arıyoruz - tüm güzellikler vardır: HasAllFocusHandlers, HasAllKeyHandlers, HasAllMouseHandlers, HasBlurHandlers, HasClickHandlers .... isim birkaç :) Ben en kolay ve en iyi yol olarak bulmak Bir işleyiciye tıklama işleyicileri eklemek.

+4

Bu çalıştı Teşekkürler! FlowPanel bir SimplePanel olduğundan ve sadece bir widget'ına sahip olabileceğinden, bir FlowPanel'i doğrudan LabelPanel etiketinin altına ve etiketine sarmak için işaretlememi değiştirmek zorunda kaldım. Bunun dışında bir cazibe gibi çalıştı.Benim tek sığırım, onun hayranı olmayan fazladan gereksiz, gereksiz bir işaret üretmesidir, ancak insanların GWT dünyasında bunu önemsemediğini çabucak fark ediyorum. – brad

7

Bunu daha önce yapmadıysanız, ancak aşağıdaki yapabileceğini:

  • özel bir sınıf HTMLPanel uzanır ve HasClickHandlers
  • MyPanel.java
aşağıdaki yöntemi ekleyin uygular MyPanel oluştur
  • Sonra'yı değiştirin. Ui.xml sayfanızda MyPanel ileve karşılık gelen Java uygulaması.

Hep olay yayılımı nasıl çalıştığını anlamaya çalıştılar HTMLTable uygulanmasına bakabilirsiniz. Panel ve HasClickHandlers uygular.

+0

serin sayesinde, ben deneyeceğim Ben bir şans aldığımda – brad

2

superb, çalışır. Eğer özel widget için olay işleyicileri kayıt @UiHandler ek açıklama kullanmak istiyorsanız

public class LiPanel extends HTMLPanel implements HasClickHandlers { 

    LiPanel() { 
     super("li", ""); 
    } 

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

} 
1

, sen addXXHandler yöntemlerini yeniden uygulamak gerekir. GWT derleyicisi üst sınıftakileri bulmuyor. Örneğin. Eğer

@UiHandler("myCustomWidget") 
public void handleWidgetSelectionChangeEvent(final SelectionEvent<CountryDts> event) { 
... 
} 

kullanmak istiyorum ve CustomWidget bu çalışma edildiği bir sınıfını genişleten eğer, size sınıf açıkça HasSelectionHandlers arayüzünü eklemeniz gerekebilir:

public class CustomComboBox<D> extends ComboBox<D> implements HasSelectionHandlers<D> { 

    @Override 
    @SuppressWarnings("pmd.UselessOverridingMethod") 
    public HandlerRegistration addSelectionHandler(final SelectionHandler<D> handler) { 
     // GWT Compile doesn't recognize method in supertype for UIHandler 
     return super.addSelectionHandler(handler); 
    } 
... 
}