在库中设置GWT小部件样式的最佳方法

时间:2010-04-28 10:50:28

标签: java css gwt widget

我正在开发一些小部件进入一个库,供我工作的公司内部使用。

我不知道为小部件设置样式的推荐方法。

至少有以下几种方式:

  • 使用Widget.setPrimaryStyleName并让用户提供外部css。我们使用maven原型来构建应用程序,因此我们可以提供默认样式。无论如何我不太喜欢它。

  • 使用GWT 2.0 CssResourceBundle。所以我们可以将CSS编译到模块中并进行优化(也可以依赖浏览器)。

  • 提供具有样式的模块。类似于默认的GWT主题。但我不知道究竟是如何运作的。

我想:

  • 尽可能地使组件具有内聚性(不依赖于外部包含的css)
  • 打开门来修改样式(如果我想改变某个小部件在具体应用程序中的外观)。

您对此主题的体验是什么?

注意:如果您正在寻找明确的答案,请查看所有答案和评论。有不同的想法和所有好的想法。然后选择最适合你的方法:)

2 个答案:

答案 0 :(得分:4)

我认为最好的方法是在模块中提供样式。这样您就可以轻松地重新设置,或为控件添加“主题”。

我正在做一个类似的项目,它托管在github(http://github.com/markovuksanovic/gwt-styles)上,所以你可能想要检查一下。你可以下载jar文件,将它包含在你的项目中,并在你的模块xml中指定你想要使用那种风格..就像

<inherits name='gwt.theme.flick.Flick'/>

我建议你为你的风格使用新模块,这样你就可以轻松切换样式......(只需更改继承标签)。所以,例如,如果你的一个小部件使用css类“my-widget”,你将有一个“样式”模块(或多个模块)来定义那个css类(在css文件中) - 这样你就可以拥有实现该css类并在它们之间切换的多个模块就像在inherits标记中更改模块名一样简单。这样你就可以很好地解耦代码 - 样式将独立于小部件的技术实现。如果您还有其他问题,请随时提出。

P.S。我忘记在上面提到了 - 密切关注如何构建样式模块(build.xml),这有点棘手。您可以在以下http://developerlife.com/tutorials/?p=229

中找到有关创建模块的更多信息

答案 1 :(得分:1)

如果您只是在编写新的小部件并希望人们能够自定义其CSS,那么我使用的一种模式是:

public class MyWidget extends Composite {
  public interface MyCss extends CssResource {
    ...
  }

  private static MyCss defaultStyle;
  private static MyCss ensureDefaultStyle() {
    if (defaultStyle == null) {
      defaultStyle = GWT.create(DefaultResourceBundle.class).css();
    }
    return defaultStyle;
  }

  /** If you want to use default style, call this */
  public MyWidget() {
    this(ensureDefaultStyle());
  }

  /** If you want to use your custom style, call this */
  public MyWidget(MyCss css) {
    ...
  }
}

因此,您的窗口小部件库可以提供CSS接口,并为其提供默认实现。如果您的用户想要自定义它,他可以将CSS接口绑定到他自己选择的css文件中,并使用第二个构造函数。

相关问题