GWT-扩展组合而不是小部件

GWT-扩展组合而不是小部件,gwt,button,widget,composite,Gwt,Button,Widget,Composite,我开始使用GWT并构建我自己的按钮。我读过关于最佳实践的书,我应该扩展组合而不是小部件。但是为什么呢?在Stackoverflow上,我读到GWT小部件对于某些浏览器有特殊的行为,但是当我扩展一个小部件时,这种行为并没有丢失,是吗?关键是,我想要一个按钮,只是另一种风格。因为我不止一次需要它,我不想一直重复代码。但如果我扩展复合,我必须提供与Button相同的方法来传递setClickHandler(…)之类的东西。这看起来需要很大的开销。如果要创建复杂的小部件,请使用Composite。复合类

我开始使用GWT并构建我自己的按钮。我读过关于最佳实践的书,我应该扩展组合而不是小部件。但是为什么呢?在Stackoverflow上,我读到GWT小部件对于某些浏览器有特殊的行为,但是当我扩展一个小部件时,这种行为并没有丢失,是吗?关键是,我想要一个按钮,只是另一种风格。因为我不止一次需要它,我不想一直重复代码。但如果我扩展复合,我必须提供与Button相同的方法来传递setClickHandler(…)之类的东西。这看起来需要很大的开销。

如果要创建复杂的小部件,请使用Composite。复合类允许您使用小部件中的其他现有小部件


对于您的情况,只需将Button widget子类化,因为您不想给按钮添加复杂性。

使用Composite of您想要创建复杂的widget。复合类允许您使用小部件中的其他现有小部件


对于您的情况,只需对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: ... */

无需扩展复合或按钮(更糟), 您可以创建不扩展其他类的类(按钮..),如下所示:

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: ... */

只是想知道。。。您真的需要为您的需求对Button进行子类化吗?在决定子类化之前,您是否尝试过setStyleName/stylePrimaryName和类似的CSS访问器?为什么不起作用?不,我只是不想重复总是setStyleName:-)在这种情况下,子类化是完全正确的,因为您不会覆盖可能破坏浏览器兼容性的渲染方法。只是想知道。。。您真的需要为您的需求对Button进行子类化吗?在决定子类化之前,您是否尝试过setStyleName/stylePrimaryName和类似的CSS访问器?为什么不起作用?不,我只是不想重复always setStyleName:-)在这种情况下,子类化是完全正确的,因为您不会覆盖可能破坏浏览器兼容性的渲染方法。谢谢,这就是我的想法。很好的人证实了这一点:)谢谢,我就是这么想的。好的,有人确认一下:)