2014-04-04 76 views
0

我正在創建一個能夠從系統中拖放文件的複合面板。 它看起來像波紋管addDomHandler和implements handler之間的區別

public abstract class Upload extends Composite implements DragEnterHandler, DragLeaveHandler, DropHandler, DragOverHandler { 
... 

    @Override 
    public void onDragOver(DragOverEvent event) { 
     // TODO Auto-generated method stub 
    } 

,並沒有在所有的工作。但「幾乎」相同的代碼

initWidget(uiBinder.createAndBindUi(this)); 
    ... 
    addDomHandler(new DragOverHandler() { 
     @Override 
     public void onDragOver(DragOverEvent event) { 
      // TODO Auto-generated method stub 
     } 
    }, DragOverEvent.getType()); 

工作得很好。

問題:

哪兒有區別嗎? Here我讀過,應該沒有區別。 還有可能在「界面工具」中使用它嗎?

回答

1

僅僅因爲你的接口,並不意味着你的實現被使用了。

讓我給你舉個例子:

public class FancyButton extends Button implements SomeFancyButtonListener 
{ 
    public FancyButton() 
    { 
     // This line is necessary, otherwise the implemented code isn't used. 
     this.addFancyButtonListener(this); 
    } 

    @Override 
    public void fancyButtonClicked(FancyClickEvent e) 
    { 
     // Do something 
    } 
} 

等同於:

public class FancyButton extends Button 
{ 
    public FancyButton() 
    { 
     this.addFancyButtonListener(new SomeFancyButtonListener() 
     { 
      @Override 
      public void fancyButtonClicked(FancyClickEvent e) 
      { 
       // Do something 
      } 
     }); 
    } 
} 

從我可以在你的第一個代碼段看,你是不是添加thisHandler

0

處理程序不工作,直到一個除非它被添加到組件上就像它是簡單的。

在第一種情況下,你已經覆蓋了處理程序的方法,但你還沒有加入該處理器基於組件本身,而在第二種情況下,你已經與它一起實現它添加組件上,這就是爲什麼它的工作。


處理程序就像在相同的方式Observer模式工程工作的聽衆。

如果某個組件想要偵聽特定事件,則必須註冊該事件。只要在系統中觸發該事件,它就會通知所有已註冊的組件。