2012-11-30 109 views
1

我有一个自己的小部件,它模拟多选列表框。 它将有一个复选框列表。如何处理自定义gwt小部件的单击事件

public class MultiListBox extends Composite implements IsWidget 
    { 
    private static MultiListBoxUiBinder uiBinder = GWT 
     .create(MultiListBoxUiBinder.class); 

    interface MultiListBoxUiBinder extends 
     UiBinder<Widget, MultiListBox> { 
    } 

    public MultiListBox() { 
     initWidget(uiBinder.createAndBindUi(this)); 
    } 
    @UiField ScrollPanel scrollPanel; 
    @UiField FlowPanel flowPanel; 

    private final List<CheckBox> checkboxes = new ArrayList<CheckBox>(); 
    private final List<String> selectedValues = new ArrayList<String>(); 

@Override 
public void addItem(final String value, final String text){ 

    final CheckBox checkbox = new CheckBox(text); 
    checkbox.setFormValue(value); 

    checkbox.addClickHandler(new ClickHandler() 
    { 
     public void onClick(final ClickEvent event) 
     { 
      final CheckBox chkbox = (CheckBox)event.getSource(); 
      if(chkbox.getValue()) 
      { 
       selectedValues.add(value); 
      } 
      else 
      { 
       selectedValues.remove(value); 
      } 
     } 
    }); 

    flowPanel.add(checkbox); 
    checkboxes.add(checkbox); 
} 

@Override 
public List<String> getSelectedValues(){ 
    return selectedValues; 
} 

@Override 
public void clear() { 
    checkboxes.clear(); 
    selectedValues.clear(); 
    flowPanel.clear(); 
} 

@Override 
public int getItemCount() { 
    return checkboxes.size(); 
} 

    } 

我在我的观点一样

<my:MultiListBox ui:field="myList"></my:MultiListBox> 

耗时现在这个样子,我想在我看来,创建这个“myList中”领域的onClick处理程序一样

@UiHandler("myList") 
    void onMyListCliced(ClickEvent e) { 
     //TODO: handle it 
    } 

人请指导如何实现它。

问候, SREE

回答

3

MultiListBox必须实现接口HasClickHandlers(在点击事件的情况下)。 如果您想允许通过UiHandler使用其他事件,那么您需要在您的自定义窗口小部件上实现Has*Handlers形式的其他一些界面。

+0

非常感谢你的答复... – Sree

+0

非常感谢你的答复......我加入了以下方法MY MultiListBox.java class'code” \t @覆盖 \t公共HandlerRegistration addClickHandler(clickHandler事件处理程序){ \t \t return this.addHandler(handler,ClickEvent.getType()); \t} 和处理的Clickevent \t @UiHandler( “专业”) \t无效onSpecialtyChange(ClickEvent E){ \t} 但是,我进入这个方法,当我在短声的插件的复选框。 复选框将被动态添加。 – Sree

+0

我不认为我现在明白你的问题。你在哪里添加了'onSpecialtyChange(ClickEvent e)'? – jusio