2013-05-14 13 views
11

Chcę dodać handler na buttonelement i mam zaimplementowane go w następujący sposób. Proszę mi pomóc w rozwiązaniu problemu w tym kodzie. Nie chcę dodawać programu obsługi bezpośrednio w widgecie przycisku.Handler na elementach DOM w GWT

 Button button = new Button("Click"); 
     Element buttonElement = button.getElement(); 

     Event.setEventListener(buttonElement, new EventListener() { 

      @Override 
      public void onBrowserEvent(Event event) { 

       String string = event.getType(); 

       if(string.equalsIgnoreCase("click")) { 
        System.out.println("CLICK"); 
       } 
      } 
     }); 

     Event.sinkEvents(buttonElement, Event.ONCLICK); 

Odpowiedz

17

Twój kod jest poprawny, możesz dodać widżet po wydarzeniu zlewu. musisz dodać widżet przed wydarzeniem sink. tylko przykład:

Button button=new Button("Click"); 
    Element buttonElement = button.getElement(); 
     RootPanel.get().add(button); 
    Event.sinkEvents(buttonElement, Event.ONCLICK); 
    Event.setEventListener(buttonElement, new EventListener() { 

     @Override 
     public void onBrowserEvent(Event event) { 
      System.out.println("ok"); 
      if(Event.ONCLICK == event.getTypeInt()) { 
       Window.alert("ok"); 
        System.out.println("CLICK"); 
      } 

     } 
    }); 
+0

, ale dlaczego musimy wywołać funkcję sinkEvents później. – Mani

+2

Ponieważ 'Button' (i większość widżetów) będzie tylko _zmienić_ wydarzenie, jeśli jest dla niego obsługa; odbywa się to automatycznie przez 'addDomHandler'. Tutaj z jakiegoś nieznanego powodu nie chcesz 'addClickHandler', więc musisz sam wywołać' sinkEvents'. BTW, po co tworzyć widget "Button", jeśli nie używasz jego zdarzeń? Co powiesz na 'Document.get(). CreateButtonElement()'? –

+0

@ThomasBroyer faktycznie chciałem uczynić wiersze datagrid przeciągalne i dla tego otrzymuję wiersz jako element i chciał dodać obsługi na nim. [http://stackoverflow.com/questions/16536118/make-the-of-the-datagrid-draggable-in-gwt/16538946?noredirect=1#16538946](thread) – Mani