Java 瓦丁保存主题

Java 瓦丁保存主题,java,vaadin,Java,Vaadin,在应用程序中,我想给出更改主题的可能性,但若我刷新页面,它将返回到默认主题,我不知道如何保存所有应用程序的主题,有人可以帮助我吗 import com.vaadin.ui.ComboBox; import com.vaadin.ui.CustomComponent; public class ThemeSelectorComboBox extends CustomComponent { private static final String SELECT_THEME = "Selec

在应用程序中,我想给出更改主题的可能性,但若我刷新页面,它将返回到默认主题,我不知道如何保存所有应用程序的主题,有人可以帮助我吗

import com.vaadin.ui.ComboBox;
import com.vaadin.ui.CustomComponent;


public class ThemeSelectorComboBox extends CustomComponent
{
    private static final String SELECT_THEME = "Select theme:";
    private final ComboBox<CustomTheme> comboBox = new ComboBox<>();

public ThemeSelectorComboBox()
{
    init();
}

private void init()
{
    comboBox.setCaption(SELECT_THEME);
    comboBox.setItems(CustomTheme.values());
    comboBox.setSelectedItem(CustomTheme.MATERIAL_DARK);
    comboBox.addValueChangeListener(event -> flipTheme(event.getValue()));
    setCompositionRoot(comboBox);

    // Set the size as undefined at all levels
    comboBox.setSizeUndefined();
    setSizeUndefined();
}

private void flipTheme(CustomTheme theme)
{
    if (theme != null)
    {
        getCompositionRoot().getUI().setTheme(theme.getThemeName());


    }
}
import com.vaadin.ui.ComboBox;
导入com.vaadin.ui.CustomComponent;
公共类ThemeSelectorComboBox扩展了CustomComponent
{
私有静态最终字符串SELECT_THEME=“SELECT THEME:”;
私有最终组合框ComboBox=新组合框();
公共主题选择框()
{
init();
}
私有void init()
{
comboBox.setCaption(选择主题);
comboBox.setItems(CustomTheme.values());
comboBox.setSelectedItem(CustomTheme.MATERIAL_深色);
comboBox.addValueChangeListener(事件->翻转主题(event.getValue());
setCompositionRoot(组合框);
//在所有级别将大小设置为未定义
comboBox.setSizeUndefined();
setSizeUndefined();
}
私有void flipTheme(自定义主题)
{
if(主题!=null)
{
getCompositionRoot().getUI().setTheme(theme.getThemeName());
}
}

}

默认情况下,Vaadin在浏览器重新加载时执行UI.init,重置主题。您基本上有两种选择:

  • 将所选主题存储在类变量中,如果已设置此变量,还可以调用
  • 使用UI类注释自动维护完整UI状态。在这种情况下使用此注释时,UI.init仅在会话启动时调用一次

  • 默认情况下,Vaadin在浏览器重新加载时执行UI.init,这将重置主题。您基本上有两种选择:

  • 将所选主题存储在类变量中,如果已设置此变量,还可以调用
  • 使用UI类注释自动维护完整UI状态。在这种情况下使用此注释时,UI.init仅在会话启动时调用一次

  • 这里的代码看起来不错,也许问题出在其他地方。您使用的是哪个Vaadin版本?Vaadin='8.3.3'@PreserveOnRefresh?它不起作用/这里的代码看起来不错,也许问题出在其他地方。您使用的是哪个Vaadin版本?Vaadin='8.3.3'@PreserveOnRefresh?它不起作用/如果这需要“持续”更多,你可以将所选主题存储为cookie或用户数据。你可以看看下一个答案吗?它仍然不起作用现在我的主题不想改变,如果这需要“持续”更多,您可以将所选主题存储为cookie或存储在用户数据中。您可以查看下一个答案吗?它现在仍然不起作用。我的主题不想更改