如果“主题”是指样式,正确的方法不是为每个主题创建一个单独的 jar,而是使用 CSS。
A. 如果你使用 CSSResource,你可以使用条件 CSS:
https://developers.google.com/web-toolkit/doc/latest/DevGuideClientBundle#Conditional_CSS
B. 如果你使用外部 CSS 文件,而不是
.headerPanel {
background: blue;
}
您可以根据所选主题指定不同的背景:
.orangeTheme .headerPanel {
background: orange;
}
.blueTheme .headerPanel {
background: blue;
}
请注意,您的代码(或 Ui:Binder)应该只将类“headerPanel”分配给小部件。当您启动您的应用程序时,您会为最外面的小部件(添加到 RootPanel 的小部件)分配一个默认主题。例如,您设置
myAppPanel.addStyleName("blueTheme");
这将为所有具有“headerPanel”类的小部件提供蓝色背景。当用户选择不同的主题时,您删除“blueTheme”类并添加“orangeTheme”类。它会自动刷新页面(无需重新加载),所有样式都会改变。
编辑:
如果您需要将主题应用于整个应用程序,包括 PopupPanel 和对话框,请使用此代码来应用您的主题:
Document.get().getBody().setClassName("blueTheme");