10

我正在 Vaadin 7 中做一个项目。我需要更改页面的主题。

在 Vaadin 6 中,有一个名为“setTheme()”的函数。这样我就可以在代码中的任何位置使用该函数更改主题。

但是,在 Vaadin 7 中,我找不到类似的东西。

我知道会有办法做到这一点。

以及当我更改主题时如何在 UI 上应用更改?

会自动更改吗?(或者)

ICEPush 会帮助我吗?

4

7 回答 7

11

在 Vaadin 7 中,方法 'setTheme()' 已被新的注解 @Theme 取代。在 Vaadin 7 中,“动态主题更改”是不可能的。

在这个Vaadin 论坛主题中有一个关于 Vaadin 7 中动态主题更改的讨论。你应该看看它。

于 2013-04-22T08:26:24.870 回答
5

在 Vaadin 7.3.0 中引入了 setTheme 功能:https ://vaadin.com/wiki/-/wiki/Main/Changing+theme+on+the+fly

于 2014-09-04T11:26:45.557 回答
4

你可以试试这个 Vaadin 7:

  1. 创建自己的 UIProvider
  2. 在根 UI 中注册您的 UIProvider
  3. 在 UIProvider 中切换主题并触发页面重新加载

DynamicThemeUIProvider.java

public class DynamicThemeUIProvider extends UIProvider {
    private String currentTheme = "reindeer";

    @Override
    public Class<? extends UI> getUIClass(UIClassSelectionEvent event) {
        return DemoUI.class;
    }

    public void setTheme(String theme) {
        currentTheme = theme;
    }

     public String getTheme(UICreateEvent event) {
         return currentTheme;
     }
}

DemoUI.java

public class DemoUI extends UI {
    private DynamicThemeUIProvider provider;
    @Override
    protected void init(VaadinRequest request) {
        provider = new DynamicThemeUIProvider();
        getSession().addUIProvider(provider);
    }

    public DynamicThemeUIProvider getDynamicThemeUIProvider() {
        return provider;
    }
}

然后在切换主题的组件上:

@Override
public void valueChange(ValueChangeEvent event) {
    DemoUI ui = (DemoUI) getUI();
    DynamicThemeUIProvider uiProvider = ui.getDynamicThemeUIProvider();

    if (uiProvider == null) {
        return;
    }

    uiProvider.setTheme("reindeer");
    try {
        String value = (String) event.getProperty().getValue();
        uiProvider.setTheme(value.toLowerCase());
    } catch (Exception e) {
        e.printStackTrace();
    }

    ui.getPage().getJavaScript().execute("document.location.reload(true)"); // page refresh
}
于 2013-05-14T16:41:45.653 回答
4

因为我使用了自定义主题,所以我让它变得非常简单。我每次都使用切换按钮并执行所需的代码。

JavaScript.getCurrent().execute("document.body.className = document.body.className.replace(\"theme1\",\"theme2\"); ");

JavaScript.getCurrent().execute("document.body.className = document.body.className.replace(\"theme2\",\"theme1\"); ");

我的css文件将是这样的。

.theme1 .v-button {
   /* some css attribute */
}

.theme2 .v-button {
   /* some css attribute */
}

相信我; 主题切换非常非常快,因为浏览器本身会执行切换主题的技巧,而不是要求 Vaadin 服务器进行切换。

于 2014-05-14T07:15:11.227 回答
1

关于图表的主题:只需在 ComboBox 或 OptionGroup(用于单选按钮)的侦听器内的某处进行切换,即可进行以下 ChartOptions 静态方法调用,例如:

ChartOptions.get().setTheme(new VaadinTheme())

然后

ChartOptions.get().setTheme(new SkiesTheme())

等等

还有 GridTheme(); GrayTheme() 和 HighChartsDefaultTheme(); 您甚至可以扩展基本主题以创建自己的主题(在 Vaadin 中查找)。

于 2014-05-13T23:47:13.630 回答
1

从 Vaadin 7.3 开始,您可以使用UI#setTheme()

于 2015-04-20T15:43:33.620 回答
0

在 Vaadin 7 及更高版本中,我们有一个名为 @Theme(yourThemeName) 的注释,基于您在此处提供的主题名称,它将重定向到特定的 .scss 样式。此注释在调用 Init 方法之前调用。

于 2016-12-14T12:27:04.997 回答