我开始使用GWT并构建自己的Button。我读到了最佳实践,我应该扩展Composite而不是Widget。但为什么?在Stackoverflow上我读到GWT Widgets对某些浏览器有特殊行为,但是当我扩展Widget时行为没有丢失,是吗?关键是,我想要一个Button,只是另一种风格。因为我不止一次需要它,所以我不想一直重复代码。但是,如果我扩展Composite,我必须提供像Button这样的方法来处理像setClickHandler(...)这样的东西。这看起来很像开销。
答案 0 :(得分:4)
使用Composite想要创建复杂的小部件。 Composite类允许您在窗口小部件中使用其他现有窗口小部件。
对于您的情况,只是子类Button小部件,因为您不希望为按钮添加复杂性。
答案 1 :(得分:1)
不需要延长复合或按钮(更糟糕),
您可以创建不扩展其他类(Button ..)的类,如下所示:
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: ... */