2012-11-30 4 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> 

처럼 내보기에이 소비하고, 나는

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

수있는 사람처럼 내보기에이 "myList에"필드에 온 클릭 핸들러를 만들고 싶었 달성 방법을 안내하십시오.

감사합니다, 스리

답변

3

귀하의 MultiListBox은 (클릭 이벤트의 경우) 인터페이스 HasClickHandlers를 구현한다. UiHandler을 통해 다른 이벤트를 사용하려면 Has*Handlers 형태로 다른 인터페이스가 많이 있습니다.이 인터페이스는 사용자 정의 위젯에 구현해야합니다.

+0

내가 내 MultiListBox.java의 class'code ' \t @Override \t 공공 HandlerRegistration addClickHandler (경우 clickHandler 처리기에 아래의 방법을 추가 ... – Sree

+0

가 답장을 너무 감사 ... 회신 주셔서 너무 감사) { \t \t this.addHandler (핸들러, ClickEvent.getType());을 반환합니다. \t} 와는 Clickevent \t @UiHandler ("특별") \t 무효 onSpecialtyChange (ClickEvent 전자) { \t} 그러나 나는 위젯의 체크 박스를 CLIK 때,이 방법으로 얻을 해달라고을 취급했다. 확인란이 동적으로 추가됩니다. – Sree

+0

나는 지금 당신의 문제가 무엇인지 이해하지 못한다고 생각합니다. 어디에서 onSpecialtyChange (ClickEvent e)를 추가 했습니까? – jusio