2011-03-31 55 views
1

我開始使用GWT並構建自己的Button。我閱讀了最佳實踐,並且我應該擴展Composite而不是Widget。但爲什麼?在Stackoverflow上,我讀到GWT Widgets對於某些瀏覽器有特殊的行爲,但是當我擴展一個Widget時,行爲不會丟失,是嗎?關鍵是,我想要一個Button,只是另一種風格。而且因爲我不止一次需要它,所以我不想一直重複這些代碼。但是如果我擴展Composite,我必須提供像Button一樣的方法來傳遞setClickHandler(...)之類的東西。這看起來像很多開銷。GWT擴展複合代替Widget

+2

只是想知道...你真的需要子類Button是否符合你的要求?在決定子類之前,你是否嘗試過setStyleName/stylePrimaryName和類似的CSS訪問器?爲什麼它不工作? – 2011-03-31 11:52:42

+0

不,我只是不想重複總是setStyleName :-) – lrxw 2011-03-31 12:57:15

+1

在這種情況下,子類化是完全沒問題的,因爲你不會覆蓋可能會破壞瀏覽器兼容性的渲染方法。 – 2011-03-31 13:02:09

回答

4

使用你想創建複雜小部件的Composite。 Composite類允許您在小部件中使用其他現有小部件。

對於你的情況,只是子類的Button小部件,因爲你不想爲你的按鈕增加複雜性。

+0

謝謝,這就是我的想法。好的人確認它:) – lrxw 2011-03-31 12:58:41

1

擴展複合或按鈕(差)是沒有必要的, 您可以創建類,它擴展沒有其他類(按鈕..)如下:

public class MyButton { 
    Button btn= new button("btn"); 
    VerticalPanel vpanel= new VerticalPane();/* or HorizontalPanel ..*/ 
    /* add whatever you need */ 
public MyButton(){ 
    /* add style to button and or to vpanel use btn.setStyleName("style-name") */ 
    vpanel.add(btn) 
} 
public Button getButton(){ return btn; }/* it allows you get button to add ClickHandlers..*/ 
public Widget asWidget() { return vpanel; } /* Widget because mybe you ll need HozonalPanel */ 
/* you can add more features: ... */