如何在 Vaadin 10 组合框中添加语言标志

2023-12-10

如何在 Vaadin 10 Como 框中添加语言标志

example


您可以使用comboBox.setRenderer()构建您自己的将要使用的布局。

comboBox.setRenderer(new ComponentRenderer<HorizontalLayout, MyLanguageClass>(language -> {
    HorizontalLayout layout = new HorizontalLayout();
    layout.add(new Image(language.getPathToFlag(), language.getName()));
    layout.add(new Label(language.getName()));
    return layout;
}));

此示例将使用图像和标签执行基本的 Horizo​​ntalLayout。当然,您可以根据您的需要进一步调整。 我用了一个组件渲染器在这里,但您也可以使用模板渲染器

请注意,您仍然需要使用comboBox.setItemLabelGenerator()此外comboBox.setRenderer(), 因为渲染器不用于所选项目 - 仅用于项目列表。据我所知,还没有办法对所选项目使用渲染器。


编辑 Vaadin 13 / Vaadin 14:
对于 Vaadin 13+,您可以使用该组件Select达到您想要的效果 - 所选选项还会显示一个标志!

private ComponentRenderer<HorizontalLayout, Locale> languageRenderer = new ComponentRenderer<>(item -> {
    HorizontalLayout hLayout = new HorizontalLayout();
    Image languageFlag = new Image("img/languageflags/"+item.getLanguage()+".png", "flag for "+item.getLanguage());
    languageFlag.setHeight("30px");
    hLayout.add(languageFlag);
    hLayout.add(new Span(getTranslation("LanguageSelection."+item.getLanguage())));
    hLayout.setDefaultVerticalComponentAlignment(Alignment.CENTER);
    return hLayout;
});
private Select<Locale> langSelect;

private Select<Locale> buildLanguageSelection() {
    langSelect = new Select<>();
    langSelect.setEmptySelectionAllowed(false);
    langSelect.setRenderer(this.languageRenderer);
    langSelect.setItems(new Locale("de"), new Locale("fr"), new Locale("en"));
    langSelect.setValue(UI.getCurrent().getLocale());
    langSelect.addValueChangeListener(change -> UI.getCurrent().getSession().setLocale(change.getValue()));
    return langSelect;
}

@Override
public void localeChange(LocaleChangeEvent event) {
    // because the renderer uses `getTranslation()`, this will re-translate the shown values using the new Locale.
    // if langSelect.refreshItems() ever becomes public, use that instead
    langSelect.setRenderer(languageRenderer);
}

Edit 2:我发布了课程LanguageSelect作为附加组件瓦丁存储库它基于此代码,但使用起来更简单。仅适用于 Vaadin 14。

LanguageSelect langSelect = new LanguageSelect(
    new Locale("de"), 
    new Locale("fr"), 
    new Locale("en")
);
someLayout.add(langSelect);

result using select

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Vaadin 10 组合框中添加语言标志 的相关文章

  • Spring Security 循环 bean 依赖

    我目前正在开发 Vaadin 弹簧应用程序 根据应用规范 用户的认证 授权必须通过查询数据库来完成jdbcTemplate 如何解决这个问题 我正在使用 Spring Boot 1 4 2 RELEASE UPDATE 此方法适用于 Spr
  • 将 Clojure 与 Vaadin 结合使用

    有没有人尝试过使用 Clojure 使用 Compojure 和 Vaadin 来实现 Web 应用程序 我看过一篇关于使用 Clojure 和 JWT 创建 Web 应用程序的文章 Vaadin 基于 GWT 因此您可以获得 GWT 的许
  • 占用 Vaadin Gridlayout 中的可用空间,但考虑换行

    我使用 Vaadin 的 GridLayout 来可视化一些标题和值标签 GridLayout 有 2 列和几行 标题标签位于左侧 其关联的值标签位于右侧 我希望第一列消耗尽可能少的空间 第二列应该占据浏览器窗口的所有重新挖掘空间 如果值标
  • Vaadin onbeforeunload 事件

    JavaScript 中是否有类似于 window onbeforeunload 的开箱即用 Vaadin 10 及更高版本 事件 我尝试使用 onDetach 或 beforeLeave 但它仅在 UI 内部有效 当用户重新加载页面或关闭
  • 如何更改 Vaadin 中的默认 HTML 模板

    我正在使用 Vaadin 和 Maven 应用程序 我想要的是更改默认的 html 模板 当我运行该应用程序时 生成的 HTML 如下所示
  • 如何在浏览器关闭时关闭 vaadin 会话但保留 http 会话?

    我正在开发一个 vaadin 7 应用程序 使用 jaas 进行用户身份验证和授权 并在应用程序服务器 glassfish 中定义领域 我有这样的要求 用户可以保持登录状态一段时间 这样他就不需要每次都输入密码 我通过设置 http 会话的
  • 如何在 Vaadin ComboBox 中添加搜索图标?

    我有一个ComboBox允许选择给定的项目 以及接受选择的图标 功能都很好 我正在寻找将搜索图标放入组合框中的效果 像瓦丁图标 https vaadin com icons 这是怎么做到的 I tried comboBox setIcon
  • 使用数据源将文本添加到组合框

    我有一个 vaadin 组合框 里面装有容器数据源 setContainerDataSource container 我现在想在结果列表中的某处插入静态文本 例如 一个组合框充满了一个容器 结果列表中弹出的第一个条目是某种标题 Person
  • 在 Vaadin Flow 中,如何将我的 Vaadin 页面嵌入到另一个网页中?

    我有一个现有的应用程序 用 WebGuiToolkit org 编写 我正在尝试在其中嵌入 Vaadin Flow 页面 我看过 Vaadin 8 的几个指南 例如 https vaadin com learn training embed
  • 如何刷新表中的单行?

    是否可以刷新a的单行vaadin table成分 到目前为止 如果表行编辑完成 我只需刷新整个表 table refreshRowCache 但这可能会导致稍后的大型表出现性能问题 那么 如何刷新单行呢 我在 Vaadin 论坛上发现了这个
  • Vaadin 将 JavaScript 流转至 Java 调用

    按照本教程进行操作https vaadin com blog calling java from javascript https vaadin com blog calling java from javascript我试图从 javas
  • 使用 Vaadin 14 初始化 VaadinServlet 时出现 NullPointerException

    我正在努力将 Vaadin 8 应用程序升级到 Vaadin 14 我必须手动定义以下扩展VaadinServlet而不是使用 Vaadin 14 的自动 servlet 注册 因为我需要将其映射到特定的 URL 模式 我在用web xml
  • 如何在 Vaadin Flow 的 FormLayout 中添加空格?

    例如 如果我有 2 列和 2 行的表单 但希望将第一个第一列中的第二列保留为空 如何在不添加空值 空跨度 的情况下执行此操作 field empty field field 现在我正在做 formLayout add new TextFie
  • Vaadin 14 组合框选择鼠标悬停时的工具提示

    我正在使用 Vaadin 14 Java 我有一个带有枚举的组合框作为可能的选择项 我想在组合框中显示枚举作为可能的选择 但我想在鼠标悬停 工具提示上显示较长的属性 名称 我看到旧版本的 Vaadin 也存在同样的问题 显然没有解决方案 并
  • Vaadin 更改默认会话过期通知?

    瓦丁7 6 2 如何更改默认的会话过期通知 消息和通知类型 要更改会话过期消息 您需要创建自己的SystemMessagesProvider 您在其中定义它 例如 在 Servlet 部署中 您可以执行以下操作 WebServlet url
  • 为什么自定义实现的 VaadinServiceInitListener 不在 vaadin 13.0.2 中监听?

    我想验证用户是否已登录以实现它 我在 vaadin 13 0 2 中找到了名为 VaadinServiceInitListener 的东西 此类用于侦听所有 UI 的 BeforeEnter 事件 以便在允许之前检查用户是否已登录进入任意页
  • 通过代码更改 Vaadin 7 中的主题

    我正在 Vaadin 7 中做一个项目 我需要更改页面的主题 在 Vaadin 6 中 有一个名为 setTheme 的函数 这样我就可以在代码中的任何位置使用该函数更改主题 但是 在 Vaadin 7 中 我找不到类似的东西 我知道会有办
  • 无法在 Vaadin Maven 项目上运行 mvn vaadin:compile

    当我运行命令 mvn vaadin compile 时出现此错误 INFO BUILD FAILURE INFO INFO Total time 1 039s INFO Finished at Thu Mar 20 11 35 00 CET
  • Vaadin 网格表:如何禁用排序功能并设置一列的颜色

    我在用着GridVaadin 中的表用于数据表示 为此 我试图弄清楚以下两个问题 1 如何禁用每列标题中的排序功能 2 如何设置表格中某一列的颜色Grid table 首先 我找到了Vaadin 文档 https vaadin com do
  • 每次按下按键时 Vaadin TextField 都会执行操作

    Vaadin 7 中没有KeyListener in TextField仅在EnterKey press 我正在寻找一个包含以下内容的附加组件SuperImmediateTextField https vaadin com director

随机推荐